How to return null inside the function/method if a property in the class is not found?

multidimensional-array, oop, php, php-5.3, stdclass

Solution

Bringing John's answer about __get() together:

<? //PHP 5.3+

class maybeBag {
    public function __get($name){
        if (isset($this->$name) === true){
            return $this->$name;
        } else {
            return null;
        }
    }

    public static function ensureIsObject($values){
        if (\is_array($values) !== true){
            return $values;
        }
        $o = new static(); //Late-bound make instance of own class
        foreach($values as $key => $value){
            $o->$key = static::ensureIsObject($value);
        }
        return $o;
    }
}

//Demo

$type = array(
    'category' => 'admin',
    'person'   => 'unique'
);
$type = maybeBag::ensureIsObject($type);

var_dump($type->category); //string(5) "admin"
var_dump($type->image); //NULL

?>

Problem

I use `stdClass` to convert an array to an object, ``` function array_to_object($array) { if(!is_array($array)) { return $array; } $object = new stdClass(); foreach($array as $key => $value) { $key = (string) $key ; $object->$key = is_array($value) ? array_to_object($value) : $value; } return $object; } $type = array( "category" => "admin", "person" => "unique" ); $type = array_to_object($type); var_dump($type->category); // string(5) "admin" ``` and of course an error when I want to get the property which is not set in the array in the first place, ``` var_dump($type->image); ``` error message, ``` Notice: Undefined property: stdClass::$image in C:\wamp\www\test\2012\php\array_to_object.php on line 52 NULL ``` I wonder if I can make the function to return `null` if no property is found? ``` var_dump($type->image); //NULL ``` EDIT: Decided to make that function above into a class, but still cannot get `__get()` working properly, ``` class objectify { public function __get($name) { if (isset($this->$name) === true){ return $this->$name; } else { return null; } } public function array_to_object($array) { if(!is_array($array)) { return $array; } $object = self::__get($name); foreach($array as $key => $value) { $key = (string) $key ; $object->$key = is_array($value) ? self::array_to_object($value) : $value; } return $object; } } $object = new objectify(); $type = array( "category" => "admin", "person" => "unique" ); $type = $object->array_to_object($type); var_dump($type->category); var_dump($type->image); ``` error message, ``` Notice: Undefined variable: name in C:\wamp\www\test\2012\php\array_to_object.php on line 85 string(5) "admin" Notice: Undefined property: stdClass::$image in C:\wamp\www\test\2012\php\array_to_object.php on line 107 NULL ``` I think this line is where the error from but I don't know what to do with it... ``` $object = self::__get($name); ```

Original source