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]   

> Без описания
sweb
Отправлено: 25 Ноября, 2012 - 05:50:35
Post Id


Новичок


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


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




Вообщем есть код:
PHP:
скопировать код в буфер обмена
  1.  
  2.         public static function Data() {
  3.                 $Data->Get = function() {
  4.                         return self::$AppData;
  5.                 };
  6.                 $Data->Display = function() {
  7.                         print_r(self::$AppData)
  8.                 };
  9.                 return $Data;
  10.         }
  11.  

Вызываю App :: Data() -> Display() получаю Fatal error: Call to undefined method stdClass :: Display().
В чем тут проблема?

(Отредактировано автором: 25 Ноября, 2012 - 05:51:27)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Ноября, 2012 - 09:55:54
Post Id



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


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


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




На актуальных версиях php так не работает...

Объявите класс:
PHP:
скопировать код в буфер обмена
  1. class callableClosure {
  2. public function __call($sMethod, $rgArgs) {
  3. call_user_func_array($this->$sMethod, $rgArgs);
  4. }
  5. }

И ваш метод немного скорректировать:
PHP:
скопировать код в буфер обмена
  1. public static function Data() {
  2.                 $Data = new callableClosure;
  3.                 $Data->Get = function() {
  4.                         return self::$AppData;
  5.                 };
  6.                 $Data->Display = function() {
  7.                         print_r(self::$AppData)
  8.                 };
  9.                 return $Data;
  10.         }

Побочный эффект - из функции будет недоступен $this, заставить его работать можно только в PHP5.4.
(Добавление)
И из function() к self класса, из которого функция была создана, разумеется, обратиться не выйдет.


-----
PostgreSQL DBA
 
 Top
sweb
Отправлено: 25 Ноября, 2012 - 10:28:43
Post Id


Новичок


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


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




Мелкий пишет:

И из function() к self класса, из которого функция была создана, разумеется, обратиться не выйдет.

Да и App::$AppData имеет приватный аксессор. ТупанулУлыбка Обойдусь классикой getData, getDataDisplay...
 
 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