2012-05-06 5 views
0

Чтобы избежать сообщений об ошибке, как в этом previous question, я решил изменить класс с __get(), как это ниже,Как найти свойство последней цепи в объекте?

class property 
{ 

    public function __get($name) 
    { 
     return isset($this->$name) ? $this->$name : new property; 
    } 
} 



class objectify 
{ 

    public function array_to_object($array = array(), $property_overloading = false) 
    { 
     # if $array is not an array, let's make it array with one value of former $array. 
     if (!is_array($array)) $array = array($array); 

     # Use property overloading to handle inaccessible properties, if overloading is set to be true. 
     # Else use std object. 
     if($property_overloading === true) $object = new property(); 
      else $object = new stdClass(); 

     foreach($array as $key => $value) 
     { 
      $key = (string) $key ; 
      $object->$key = is_array($value) ? self::array_to_object($value, $property_overloading) : $value; 
     } 


     return $object; 

    } 
} 

$object = new objectify(); 
$type = null; 
$type = $object->array_to_object($type,true); 
var_dump($type->a->b->c); 

так что я получаю этот результат в конце концов,

object(property)#3 (0) { } 

но все еще не идеальна. в моем понимании, выше решение обрабатывает объект в цепи как это,

$type = object{}->object{}->object{} 

так интересно, если я могу найти это ли последняя цепь и она пуста, то просто вывести null?

$type = object{}->object{}->NULL 

Возможно ли это с помощью PHP?

EDIT:

Я думал об идее, которая должна подсчитать, сколько раз был экземпляр класса недвижимости,

class property 
{ 
    public static $counter = 0; 

    function __construct() { 
     self::$counter++; 
    } 

    public function __get($name) 
    { 
     if(isset($this->$name)) 
     { 
      return $this->$name; 
     } 
     elseif(property::$counter < 3) 
     { 
      return new property; 
     } 
     else 
     { 
      return null; 
     } 

    } 
} 

но моя единственная проблема заключается в том, чтобы сделать номер 3 динамичный. Есть идеи?

ответ

0

Похоже, вы ищете PHP версии ?. оператора Groovy,: http://groovy.codehaus.org/Null+Object+Pattern

AFAIK, вы не можете перегрузить или создать новый оператор в PHP. Вы могли бы имитировать его, передав все ваши вложенные вызовы функции, и функция знает, когда вернуть null.

Редактировать: другие варианты, размещенные здесь - http://justafewlines.com/2009/10/groovys-operator-in-php-sort-of/

Смежные вопросы