Get value of object php

Using PHP, I have to parse a string coming to my code in a format like this:

object(stdClass)(4) { 
    ["Title"]=> string(5) "Fruit" 
    ["Color"]=> string(6) "yellow" 
    ["Name"]=> string(6) "banana" 
    ["id"]=> int(3) 
}

I'm sure there's a simple solution, but I can't seem to find it... how to get the Color and Name?

Thanks so much.

Naftali

143k39 gold badges239 silver badges299 bronze badges

asked Oct 31, 2011 at 15:46

Get value of object php

3

You can do: $obj->Title etcetera.

Or you can turn it into an array:

$array = get_object_vars($obj);

answered Oct 31, 2011 at 15:51

NaftaliNaftali

143k39 gold badges239 silver badges299 bronze badges

2

Example StdClass Object:

$obj = new stdClass();

$obj->foo = "bar";

By Property (as other's have mentioned)

echo $obj->foo; // -> "bar"

By variable's value:

$my_foo = 'foo';

echo $obj->{$my_foo}; // -> "bar"

answered Aug 17, 2018 at 21:30

Get value of object php

mfinkmfink

1,16119 silver badges30 bronze badges

I have resolved this issue by converting stdClass object to array using json_encode and json_decode like this:

$object_encoded = json_encode( $obj );
$object_decoded = json_decode( $object_encoded, true );

echo $object_decoded['Color'];

Note: passing true parameter in json_decode will return an associative array.

answered Mar 7 at 10:14

extract(get_object_vars($obj))

will return $Title, $Color etc

answered May 30 at 7:18

LoggyLoggy

111 bronze badge

(PHP 4, PHP 5, PHP 7, PHP 8)

get_object_varsGets the properties of the given object

Description

get_object_vars(object $object): array

Parameters

object

An object instance.

Return Values

Returns an associative array of defined object accessible non-static properties for the specified object in scope.

Examples

Example #1 Use of get_object_vars()

<?phpclass foo {
    private 
$a;
    public 
$b 1;
    public 
$c;
    private 
$d;
    static 
$e;

       public function

test() {
        
var_dump(get_object_vars($this));
    }
}
$test = new foo;
var_dump(get_object_vars($test));$test->test();?>

The above example will output:

array(2) {
  ["b"]=>
  int(1)
  ["c"]=>
  NULL
}
array(4) {
  ["a"]=>
  NULL
  ["b"]=>
  int(1)
  ["c"]=>
  NULL
  ["d"]=>
  NULL
}

Note:

Uninitialized properties are considered inaccessible, and thus will not be included in the array.

See Also

  • get_class_methods() - Gets the class methods' names
  • get_class_vars() - Get the default properties of the class

fmmarzoa at librexpresion dot org

17 years ago

You can still cast the object to an array to get all its members and see its visibility. Example:

<?phpclass Potatoe {
    public
$skin;
    protected
$meat;
    private
$roots;

    function

__construct ( $s, $m, $r ) {
       
$this->skin = $s;
       
$this->meat = $m;
       
$this->roots = $r;
    }
}
$Obj = new Potatoe ( 1, 2, 3 );

echo

"<pre>\n";
echo
"Using get_object_vars:\n";$vars = get_object_vars ( $Obj );
print_r ( $vars );

echo

"\n\nUsing array cast:\n";$Arr = (array)$Obj;
print_r ( $Arr );?>

This will returns:

Using get_object_vars:
Array
(
    [skin] => 1
)

Using array cast:
Array
(
    [skin] => 1
    [ * meat] => 2
    [ Potatoe roots] => 3
)

As you can see, you can obtain the visibility for each member from this cast. That which seems to be spaces into array keys are '\0' characters, so the general rule to parse keys seems to be:

Public members: member_name
Protected memebers: \0*\0member_name
Private members: \0Class_name\0member_name

I've wroten a obj2array function that creates entries without visibility for each key, so you can handle them into the array as it were within the object:

<?phpfunction obj2array ( &$Instance ) {
   
$clone = (array) $Instance;
   
$rtn = array ();
   
$rtn['___SOURCE_KEYS_'] = $clone;

    while ( list (

$key, $value) = each ($clone) ) {
       
$aux = explode ("\0", $key);
       
$newkey = $aux[count($aux)-1];
       
$rtn[$newkey] = &$rtn['___SOURCE_KEYS_'][$key];
    }

    return

$rtn;
}
?>

I've created also a <i>bless</i> function that works similar to Perl's bless, so you can further recast the array converting it in an object of an specific class:

<?phpfunction bless ( &$Instance, $Class ) {
    if ( ! (
is_array ($Instance) ) ) {
        return
NULL;
    }
// First get source keys if available
   
if ( isset ($Instance['___SOURCE_KEYS_'])) {
       
$Instance = $Instance['___SOURCE_KEYS_'];
    }
// Get serialization data from array
   
$serdata = serialize ( $Instance );

    list (

$array_params, $array_elems) = explode ('{', $serdata, 2);
    list (
$array_tag, $array_count) = explode (':', $array_params, 3 );
   
$serdata = "O:".strlen ($Class).":\"$Class\":$array_count:{".$array_elems;$Instance = unserialize ( $serdata );
    return
$Instance;
}
?>

With these ones you can do things like:

<?php

define

("SFCMS_DIR", dirname(__FILE__)."/..");
require_once (
SFCMS_DIR."/Misc/bless.php");

class

Potatoe {
    public
$skin;
    protected
$meat;
    private
$roots;

    function

__construct ( $s, $m, $r ) {
       
$this->skin = $s;
       
$this->meat = $m;
       
$this->roots = $r;
    }

    function

PrintAll () {
        echo
"skin = ".$this->skin."\n";
        echo
"meat = ".$this->meat."\n";
        echo
"roots = ".$this->roots."\n";
    }
}
$Obj = new Potatoe ( 1, 2, 3 );

echo

"<pre>\n";
echo
"Using get_object_vars:\n";$vars = get_object_vars ( $Obj );
print_r ( $vars );

echo

"\n\nUsing obj2array func:\n";$Arr = obj2array($Obj);
print_r ( $Arr );

echo

"\n\nSetting all members to 0.\n";
$Arr['skin']=0;
$Arr['meat']=0;
$Arr['roots']=0;

echo

"Converting the array into an instance of the original class.\n";
bless ( $Arr, Potatoe );

if (

is_object ($Arr) ) {
    echo
"\$Arr is now an object.\n";
    if (
$Arr instanceof Potatoe ) {
        echo
"\$Arr is an instance of Potatoe class.\n";
    }
}
$Arr->PrintAll();?>

niemans at pbsolo dot nl

1 year ago

You can use an anonymous class to return public variables from inside the class:

public function getPublicVars () {
    $me = new class {
        function getPublicVars($object) {
            return get_object_vars($object);
        }
    };
    return $me->getPublicVars($this);
}

Test script:

class Test {
    protected $protected;
    public    $public;
    private   $private;
    public function getAllVars () {
        return call_user_func('get_object_vars', $this);
    }
    public function getPublicVars () {
        $me = new class {
            function getPublicVars($object) {
                return get_object_vars($object);
            }
        };
        return $me->getPublicVars($this);
    }
}

$test = new Test();
print_r(get_object_vars($test)); // array("public" => NULL)
print_r($test->getAllVars());   // array("protected" => NULL, "public" => NULL, "private" => NULL)
print_r($test->getPublicVars()); // array("public" => NULL)

Fabien Haddadi

10 years ago

It seems like there's no function that determines all the *static* variables of a class.

I've come out with this one as I needed it in a project:

<?php
function get_class_static_vars($object) {
     return
array_diff(get_class_vars(get_class($object)), get_object_vars($object));
}
?>

It relies on an interesting property: the fact that get_object_vars only returns the non-static variables of an object.

marcus at marcusball dot me

1 year ago

When dealing with a very large quantity of objects, it is worth noting that using `get_object_vars()` may drastically increase memory usage.

If instantiated objects only use predefined properties from a class then PHP can use a single hashtable for the class properties, and small memory-efficient arrays for the object properties:

If a class is defined with three properties ($foo, $bar, and $baz), "PHP no longer has to store the data in a hashtable, but instead can say that $foo is proprety 0, $bar is proprety 1, $baz is property 2 and then just store the properties in a three-element C array. This means that PHP only needs one hashtable in the class that does the property-name to offset mapping and uses a memory-efficient C-array in the individual objects."

However, if you call `get_object_vars()` on an object like this, then PHP WILL build a hashtable for the individual object. If you have a large quantity of objects, and you call `get_object_vars()` on all of them, then a hashtable will be built for each object, resulting in a lot more memory usage. This can be seen in this bug report: https://bugs.php.net/bug.php?id=79392

The effects of this can be seen in this example:

<?php
class Example {
    public
$foo;
    public
$bar;
    public
$baz;
}

function

printMem($label) {
   
$usage = memory_get_usage();
    echo
sprintf('%s: %d (%.2f MB)', $label, $usage, $usage / 1000000) . PHP_EOL;
}
printMem('start');$objects = [];
for (
$i = 0; $i < 20000; $i++) {
   
$obj = new Example;
   
$obj->foo = bin2hex(random_bytes(5));
   
$obj->bar = bin2hex(random_bytes(5));
   
$obj->baz = bin2hex(random_bytes(5));
   
$objects[] = $obj;
}
printMem('before get_object_vars');// Clone each object, and get the vars on the clone
foreach ($objects as $obj) {
   
$c = clone $obj;
   
$vars = get_object_vars($c);// Accessing and modifying the original object is fine.
   
foreach ($vars as $var => $val) {
       
$obj->{$var} = strrev($val);
    }
}
printMem('get_object_vars using clone');// Get the vars on each object directly
foreach ($objects as $obj) {
   
$vars = get_object_vars($obj);// The memory is used even if you do not modify the object.
}printMem('get_object_vars direct access');
?>

The output of this is:

    start: 405704 (0.41 MB)
    before get_object_vars: 6512416 (6.51 MB)
    get_object_vars using clone: 6033408 (6.03 MB)
    get_object_vars direct access: 13553408 (13.55 MB)

In short, if you are using classes to avoid additional memory usage associated with hashtables (like in associative arrays), be aware that `get_object_vars()` will create a hashtable for any object passed to it.

This appears to be present in all versions of PHP; I've tested it on PHP 5, 7, and 8.

Quotes are from Nikic's blog posts on arrays and hashtable memory usage, and Github gist "Why objects (usually) use less memory than arrays in PHP".

How Can Get object property value in PHP?

The get_object_vars() function is an inbuilt function in PHP that is used to get the properties of the given object. When an object is made, it has some properties. An associative array of properties of the mentioned object is returned by the function. But if there is no property of the object, then it returns NULL.

How do you find the value of the StdClass object?

You create StdClass objects and access methods from them like so: $obj = new StdClass; $obj->foo = "bar"; echo $obj->foo; I recommend subclassing StdClass or creating your own generic class so you can provide your own methods. Thank you for your help!

How get the key of an object in PHP?

You can cast the object to an array like this: $myarray = (array)$myobject; And then, for an array that has only a single value, this should fetch the key for that value. $value = key($myarray);

What is StdClass object in PHP?

The stdClass is the empty class in PHP which is used to cast other types to object. It is similar to Java or Python object. The stdClass is not the base class of the objects. If an object is converted to object, it is not modified.