2010-11-11 2 views
0
MySuperCooLFunction($object->property1->property2->property3); 

...Получить родительское свойство на PHP

public function MySuperCooLFunction($args) { 
    // retreive property 3 
    // retreive property 2 
    // retreive property 1 
} 

Есть ли вообще это делать?

+0

Почему родительского свойства, я не вижу никакого наследования здесь. Вы просто передаете объект функции ... ну, если вы это сделаете, объект доступен внутри функции. Так где же проблема? – markus

ответ

0

Это возможно только в том случае, если ваши объекты свойств хранят свой родительский объект в одном из своих свойств, поскольку вы передаете только значение property3 в MySuperCooLFunction(). Я бы не рекомендовал это (хотя это могло бы привести к довольно негибкому коду). Почему бы вам не пройти $object до MySuperCooLFunction()? Вы можете получить доступ ко всем свойствам при работе сверху вниз.

+0

Да, я знаю, я просто пытаюсь сэкономить кодовые линии сверху вниз, но я попытаюсь сделать обходной путь. – alexandre

+0

@alexandre: Не пытайтесь сжать свой код настолько, что простые вещи выглядят сложными. Это того не стоит. ;) – jwueller

0

Нет, для функции (как написано) нет возможности получить значения object, property1 или property2.

Когда вызывается MySuperCooLFunction($object->property1->property2->property3), в качестве аргумента передается только значение из property3. Когда вызов выполнен, интерпретатор разрешает $object->property1->property2->property3 значение property3, затем передает данные в функцию. Функция не знает, как было найдено/вычислено значение аргумента.

0

Вы не можете этого сделать. Когда вы вызываете свою функцию, вы делаете копию свойства3 (в случае, если это простая переменная) или ссылаетесь на нее, но вы теряете ссылки на остальную часть родительского объекта.

Если вы хотите это сделать, вам нужно преобразовать property3 и property2 и property1 в объекты, у которых есть родительское поле, которое указывает на родительский.

2

Нет, вы, вероятно, хотите сделать что-то вроде этого вместо

MySuperCooLFunction($object); 
... 

public function MySuperCooLFunction($object) { 
    $object->property1 // retreive property 1 
    $object->property1->property2 // retreive property 2 
    $object->property1->property2->property3 // retreive property 3 
} 

, если вы не хотите передать $ объект в течение какой-то причине,

public function MySuperCooLFunction($property1) { 
     $property1 // property 1 is passed in 
     $property1->property2 // retreive property 2 
     $property1->property2->property3 // retreive property 3 
    } 

также работает

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