Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Какой метод срабатывает? (PHP)

47K
09 декабря 2010 года
PeaceCoder
11 / / 30.07.2009
Вопрос в следующем. Какой срабатывает метод при создании подобьекта следующим образом:

 
Код:
class MY {}

$a = (object)array();

$a->aa->bb=5; // работает

$b = new MY;

$b->aa->bb = 10; // неработает


Какой надо подключить интерфейс и прописать свою функцию создания свойства "aa", когда его нет?

Если комуто не понятно о чем речь, если просто - хочу создать интерфейс прозрачный для обращения к свойствам как через "->" так и через "[]"
244
10 декабря 2010 года
UAS
2.0K / / 19.07.2006
$b = new MY;
$b->aa = new stdClass;
$b->aa->bb = 10;
47K
20 декабря 2010 года
PeaceCoder
11 / / 30.07.2009
Цитата: UAS
$b = new MY;
$b->aa = new stdClass;
$b->aa->bb = 10;



Ты не понял. Мой пример Со стд классом работает. Т.е. Пхп автоматом создает что $b->aa = new stdClass; Для примера попробуй просто написать

 
Код:
$b = new stdClass;
$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; // сработает


магические методы работают если делается 1но уровневые присвоения. А если делать как я написал $b->aa->cc при условии что $b->aa не существует, то оно автоматом и не создается =(

Тут вопрос такой: когда создается такая ситуация, php пытается создать сначало сс в aa, если нет aa в $b он его создает и возвращается к cc. Со своими классами такое не проходит почему - то.
244
20 декабря 2010 года
UAS
2.0K / / 19.07.2006
А, ну так это логично. Интерфейс не дает языку новой функциональности, он лишь "стандартизирует" какие-либо функции. Поэтому если хотите делать так, как хотите, то возможно придется заюзать в методе offsetSet установку несуществующих атрибутов класса и т.д. по рекурсии для всех создаваемых атрибутов и подклассов.
Хотя имхо это все изврат какой-то.
47K
25 декабря 2010 года
PeaceCoder
11 / / 30.07.2009
Ясно. Ну и на этом спасибо что хотябы ответили на вопрос. Вобщем я решаю эту задачу предварительным созданием подуровней обьекта а потом уже обращаюсь к одноуровнему присваиванию.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог