Магические методы __set, __get

123
dkameleon
На сайте с 09.12.2005
Offline
386
#11

есть ещё __callStatic()...

Дизайн интерьера (http://balabukha.com/)
siv1987
На сайте с 02.04.2009
Offline
427
#12
ortegas:
Милованов Ю.С, его нужно будет объявить глобальным + он всегда должен быть установленным.

Что мешает использовать тот же Singleton, создать класс "одиночку" Registry (паттерн Registry)?

O
На сайте с 29.05.2008
Offline
195
#13

dkameleon, да точно. Был бы __getStatic и проблемы бы не было. Но и __callStatic дает возможность писать типа CONF::get('DB')['PASSWORD'];. Наверное, так и придется сделать.

siv1987, обращение к статическому методу каждый раз.

dkameleon
На сайте с 09.12.2005
Offline
386
#14
ortegas:
Милованов Ю.С, мне тоже нравиться этот вариант. Но его нужно будет объявить глобальным + он всегда должен быть установленным. А мне нужна также ленивая подзагрузка. Поэтому, я и подумал об эмуляции __set, __get для статического контекста.

это по сути получается динамическая генерация класса...

как интерпретатору поступать с уже созданными инстансами класса? добавлять/удалять свойства автоматически?

O
На сайте с 29.05.2008
Offline
195
#15

dkameleon, также как и со свойствами объектов. А за __callStatic спасибо, это действительно неплохая идея.

siv1987
На сайте с 02.04.2009
Offline
427
#16
ortegas:
Это плохо? Хотя сам знаю ответ.

В вашем случае да.

ortegas:
обращение к статическому методу каждый раз.

Не обязательно обращаться "напрямую", можно сохранить инстанс в локальную переменную или в свойство класса.

ortegas:
типа CONF::get('DB')['PASSWORD'];

по моему такой синтаксис в php не проканает, и все равно придется обращаться типа CONF::get('DB_PASSWORD');

O
На сайте с 29.05.2008
Offline
195
#17
Не обязательно обращаться "напрямую", можно сохранить инстанс в локальную переменную или в свойство класса.

И плодить ссылки в памяти. :( Да и еще больше букофф.

по моему такой синтаксис в php не проканает, и все равно придется обращаться типа CONF::get('DB_PASSWORD');

Проканает. get вернет массив.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#18


function funcmy()
{
$arr['name'] = 'yura';
return $arr;
}
echo funcmy()['name'];

Parse error: syntax error, unexpected '[', expecting ',' or ';' in C:\WebServer\Apache2.2\htdocs\site\index.php on line 7

Я вот тоже до сих пор недоумеваю, почему так нельзя.

Очень было бы удобно.

$login = mysql_fetch_assoc(mysql_query("SELECT `login` FROM tbl1 WHERE `id`='$id' LIMIT 1"))['login'];

Подпись))
O
На сайте с 29.05.2008
Offline
195
#19

Милованов Ю.С, причем здесь функции? Мы о методах говорили.



class A {
static function B() {
return array('say' => 'hello');
}
}
var_dump(A::B()['say']);

string(5) "hello"

Хотя у меня и ваш пример работает (PHP 5.5b4).

Очень было бы удобно.
$login = mysql_fetch_assoc(mysql_query("SELECT `login` FROM tbl1 WHERE `id`='$id' LIMIT 1"))['login'];

У меня во всех методах так. Точно знаю, с PHP 5.4 это работает.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#20

А у меня на 5.2.17(не надо смеятся) не работает с функциями. Предполагаю что и с классами тоже не будет. Щас попробую.

Точно, не работает. Сейчас вспомнил что читал про это на пхп.нет в разделе "что нового в версии Х". Версию не помню;)

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий