[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как рекурсивно обратиться к свойству __get()
aRpi
Здравствуйте!
При использовании метода магического __get()

- это тот самый который позволяет обратиться к несуществующему свойству
- не получается обратиться к этому свойству рекурсивно

- пишет Undefined property!

это что стандарт такой? как избавиться от этой ошибки, и обратиться все таки к свойству, рекурсивно, кто знает?


Notice: Undefined property: myclass::$test in /home///index.php on line 49




class myclass{

public $num = 0;

public function __get($name){

if(++$this->num < 5){

echo '<pre>';
print_r($this->num);
echo '</pre>';

//$this->__get('test'); //Работает нормально
$this->test; //Не работает, пишет нет свойства

}

}

}

$object = new myclass();

$object->test;
sergeiss
Оно и хорошо, что нельзя так обратиться. Иначе ты легко создашь бесконечное рекурсивное обращение.

И ты можешь объяснить смысл таких телодвижений? Почему бы изнутри магического метода не обращаться к реально существующим свойствам?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
aRpi
это нужно что бы была модульность
так просто описать очень сложно
думаю буду свойства создавать на лету
stump
свойства создавать нельзя! Можно обратиться к недоступному из вне свойству. При обращении внутри класса недоступных свойств быть не может.

_____________
Трус не играет в хокей
kaww
Цитата (stump @ 24.04.2015 - 06:04)
свойства создавать нельзя!

Что по-твоему будет ?
class foo{}
$foo = new foo();
$foo->bar = "baz";
var_dump($foo);
stump
Цитата (kaww @ 24.04.2015 - 10:12)
Цитата (stump @ 24.04.2015 - 06:04)
свойства создавать нельзя!

Что по-твоему будет ?
class foo{}
$foo = new foo();
$foo->bar = "baz";
var_dump($foo);

Прикольно!
Полагаю что приведенный код альтернативен такому:
class foo{ function __set($name, $value){$this->$name=$value;}}
$foo = new foo();
$foo->bar = "baz";
var_dump($foo);


однако в мануале пишут:

Метод __set() будет выполнен при записи данных в недоступные свойства.
Метод __get() будет выполнен при чтении данных из недоступных свойств.

Следовательно:

class foo{}
$foo = new foo();
$foo->bar = "baz";
var_dump($foo);


будет выполнена запись в недоступное свойство вероятнее всего методом __get базового класса всех классов. Это можно предположить исходя из того, что определение методов function __get и function __set называется перегрузкой. А раз перегрузка то они уже где-то определены и я и говорю о том где-то.

_____________
Трус не играет в хокей
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.