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 :: Не static классы + call_user_func

 PHP.SU

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


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

> Описание: ООП :)
MAKAPOH
Отправлено: 18 Января, 2011 - 07:22:40
Post Id


Новичок


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


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




Такой вопрос Улыбка
Есть класс например
PHP:
скопировать код в буфер обмена
  1. Class A {
  2.     private $db;
  3.     function __construct(){
  4.         global $config;
  5.         $this->db = new DB($config["host"], $config["login"], $config["password"], $config["db"]);
  6.     }
  7.     function getInfo() {
  8.         $info = $this->db->query("select ...");
  9.         return $info;
  10.    }
  11. }

При использовании

Будет вызван метод getInfo класса A (A::getInfo()), причем будет вызван статически и $this работать не будет. Как быть?) Очень нужна call_user_func для подключения модулей Улыбка
 
 Top
EuGen Администратор
Отправлено: 18 Января, 2011 - 09:17:38
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class myclass
  4. {
  5.     protected $testvar;
  6.     function say_hello()
  7.     {
  8.        $this->testvar="Hello";
  9.        echo($this->testvar);
  10.     }
  11. }
  12. $classname = "myclass";
  13. $myobject = new myclass();
  14.  
  15. call_user_func(array($myobject, 'say_hello'));
  16. ?>
  17.  
  18.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
garvey
Отправлено: 18 Января, 2011 - 09:19:20
Post Id



Частый посетитель


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


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




Размышляйте. Вы передаете в функцию не объект, а название класса. Только статический метод можно вызвать не создавая объект.

(Добавление)
garvey пишет:
Размышляйте. Вы передаете в функцию не объект, а название класса. Только статический метод можно вызвать не создавая объект.


Edit: нужно страницу обновлять перед тем как отправляю)
(Добавление)
И кстати. Не используйте никогда глобальные переменные. Тем более в ООП.
 
 Top
JustUserR
Отправлено: 19 Января, 2011 - 14:44:00
Post Id



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


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


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




MAKAPOH пишет:
Будет вызван метод getInfo класса A (A::getInfo()), причем будет вызван статически и $this работать не будет
Реализация объектно-ориентированных возможностей языка PHP основана на использовании именованных просранств имен ассоциированных со статическими определяемыми элементами классов как объектов непервого рода а также механизма ссылок - таким образом процесс осуществления запуска метода некоторого объекта в действительности формируется в виде class::method($obj, $args) - таким образом для реализации собственного динамического вызова предполагаемого метода в соответствующего урвоня трактовки входящих в его сигнатуру элементов - возможно использование библиотеки runkit


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Invert
Отправлено: 20 Января, 2011 - 02:35:27
Post Id



Частый гость


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


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




JustUserR пишет:
Не используйте никогда глобальные переменные.

Обеими руками поддерживаю.
Данные можно и нужно передавать в метод.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. class A {
  4.     private $db;
  5.     function __construct ( $config = FALSE ) {
  6.                 if ( is_array ( $config ) ) {
  7.                 $this->db = new DB ( $config [ "host" ], $config [ "login" ], $config [ "password" ], $config [ "db" ] );
  8.                         $result = TRUE;
  9.                 } else {
  10.                         $result = FALSE;
  11.                 }
  12.                 return $result;
  13.     }
  14.     function getInfo () {
  15.         $info = $this->db->query ( "select ..." );
  16.         return $info;
  17.     }
  18. }
  19.  
  20.  
  21. $ConfData = ...
  22. $obj = new A ( $ConfData );
  23.  
  24.  

(Отредактировано автором: 20 Января, 2011 - 02:35:50)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB