Какой метод срабатывает? (PHP)
Код:
class MY {}
$a = (object)array();
$a->aa->bb=5; // работает
$b = new MY;
$b->aa->bb = 10; // неработает
$a = (object)array();
$a->aa->bb=5; // работает
$b = new MY;
$b->aa->bb = 10; // неработает
Какой надо подключить интерфейс и прописать свою функцию создания свойства "aa", когда его нет?
Если комуто не понятно о чем речь, если просто - хочу создать интерфейс прозрачный для обращения к свойствам как через "->" так и через "[]"
$b->aa = new stdClass;
$b->aa->bb = 10;
Цитата: UAS
$b = new MY;
$b->aa = new stdClass;
$b->aa->bb = 10;
$b->aa = new stdClass;
$b->aa->bb = 10;
Ты не понял. Мой пример Со стд классом работает. Т.е. Пхп автоматом создает что $b->aa = new stdClass; Для примера попробуй просто написать
Код:
$b = new stdClass;
$b->aa->bb->cc->dd=5;
print_r($b);
$b->aa->bb->cc->dd=5;
print_r($b);
и поймешь о чем я имею ввиду.
ArrayAccess кстати тоже не работает если сделать так:
Код:
class MY implements ArrayAccess { прописать все методы }
$b = new MY;
$b[1][3][4] = 10; // не сработает.
//а вот на стандартном:
$c = array();
$c[1][3][4] = 10; // сработает
$b = new MY;
$b[1][3][4] = 10; // не сработает.
//а вот на стандартном:
$c = array();
$c[1][3][4] = 10; // сработает
магические методы работают если делается 1но уровневые присвоения. А если делать как я написал $b->aa->cc при условии что $b->aa не существует, то оно автоматом и не создается =(
Тут вопрос такой: когда создается такая ситуация, php пытается создать сначало сс в aa, если нет aa в $b он его создает и возвращается к cc. Со своими классами такое не проходит почему - то.
Хотя имхо это все изврат какой-то.
Ясно. Ну и на этом спасибо что хотябы ответили на вопрос. Вобщем я решаю эту задачу предварительным созданием подуровней обьекта а потом уже обращаюсь к одноуровнему присваиванию.