Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: переменная вместо имени статического класса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Vaio
Отправлено: 12 Августа, 2013 - 22:49:32
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Нужно вместо имени статического класса указывать переменную.
Вот так работать не хочет
 
 Top
Мелкий Супермодератор
Отправлено: 12 Августа, 2013 - 22:56:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. class foo {
  2.         public static function method() {
  3.                 echo __METHOD__;
  4.                 }
  5.         }
  6.        
  7. $sClassName = 'foo';
  8. $sClassName::method();

It works.


-----
PostgreSQL DBA
 
 Top
Vaio
Отправлено: 12 Августа, 2013 - 23:02:20
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Забыл добавить:

PHP:
скопировать код в буфер обмена
  1. $this->myVariable::myFunction();


Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
 
 Top
DlTA
Отправлено: 12 Августа, 2013 - 23:10:38
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




 
 Top
Мелкий Супермодератор
Отправлено: 12 Августа, 2013 - 23:11:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ну это да, заворачивается в call_user_func(array($this->sClassName,'method'));
Или с присвоением значения временной переменной.


-----
PostgreSQL DBA
 
 Top
Vaio
Отправлено: 12 Августа, 2013 - 23:18:22
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Спасибо, а как быть с вызовом статической переменной?
 
 Top
DlTA
Отправлено: 12 Августа, 2013 - 23:39:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Vaio пишет:
а как быть с вызовом статической переменной?
для получения доступа к статической переменной, оберните это дело в статический метод
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Августа, 2013 - 08:49:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. class Test {
  2.         static $foo = 111;     
  3. }
  4.  
  5. $bar = 'foo';
  6. echo Test::${$bar};
  7.  
 
 Top
Vaio
Отправлено: 13 Августа, 2013 - 10:16:42
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Для переменных сделал вот так:

PHP:
скопировать код в буфер обмена
  1. function variable($param){
  2.         $class = new ReflectionClass($this->myVariable);
  3.         $value = $class->getStaticPropertyValue($param);
  4.         return $value;
  5.     }
  6. echo variable('myStaticVariable');
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Августа, 2013 - 10:55:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Удобно?
Надо создать 2 объекта, чтобы получить значение статического свойства.

(Отредактировано автором: 13 Августа, 2013 - 11:00:51)

 
 Top
Мелкий Супермодератор
Отправлено: 13 Августа, 2013 - 11:09:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Мне кажется, вы пишете обфускатор. Переменные переменные, имена классов в переменных, имена методов и членов в переменных.
Ой не хотел бы я такой код разбирать.

Если вам не нужны в действительности приватные свойства, то тяжеловесную рефлексию лучше не трогать.
PHP:
скопировать код в буфер обмена
  1. class Test {
  2.     static $foo = 111;
  3.     }
  4.  
  5. $sClassName = 'Test';
  6. $bar = 'foo';
  7.  
  8. echo $sClassName::${$bar};


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Августа, 2013 - 11:20:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Мелкий пишет:
сли вам не нужны в действительности приватные свойства

PHP 5.4.11 уже ругается при обращение к приватным свойствам.
Раньше возвращал все без разбору.
 
 Top
Vaio
Отправлено: 13 Августа, 2013 - 11:43:34
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Спасибо, теперь сделал вот так:

PHP:
скопировать код в буфер обмена
  1. function variable($param){
  2.         $class = $this->myVariable;
  3.         $value = $class::${$param};
  4.         return $value;
  5. }


Так будет наиболее оптимально?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB