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
Форумы портала PHP.SU :: Версия для печати :: К статическому методу можно получить доступ как к методу объекта? О_о
Форумы портала PHP.SU » » Объектно-ориентированное программирование » К статическому методу можно получить доступ как к методу объекта? О_о

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

1. like_you - 09 Июля, 2014 - 02:08:55 - перейти к сообщению
Странно, что РНР не ругается когда пробуешь получить доступ к статическому методу как к обычному методу объекта:
PHP:
скопировать код в буфер обмена
  1. class A{
  2.        
  3.         public static $static_var = 'this is static var';
  4.        
  5.         public static function static_method()
  6.         {
  7.                 echo 'this is static_method()';
  8.         }
  9. }
  10.  
  11. $obj = new A;
  12. $obj->static_method();

Но в тоже время ругается при попытке получить доступ таким же образом к статическому свойству. В чем логика?
2. DelphinPRO - 09 Июля, 2014 - 08:13:14 - перейти к сообщению
Еще как ругается, выдавая ошибки Strict error.... Просто у вас выключен этот уровень ошибок.
3. LIME - 09 Июля, 2014 - 09:20:54 - перейти к сообщению
на самом деле все объекты это просто данные
методы лежат отдельно
вернее данные лежат отдельно
то есть когда ты выполняешь одинаковый метод разных экземпляров то выполняется буквально один и тот же метод получивший ссылку на смещение данных экземпляра
потому возможен такой фокус с методами
а вот если данных по смещению нет то их нет
статические данные хранятся какбы рядом с методами и доступны для всех экземпляров
это все приблизительное объяснение но как-то так
4. like_you - 09 Июля, 2014 - 12:54:38 - перейти к сообщению
DelphinPRO пишет:
Еще как ругается, выдавая ошибки Strict error.... Просто у вас выключен этот уровень ошибок.

Нет, для тестов я всегда использую локальную машину, где установлена php-5.4.11-nts-Win32-VC9-x86, и где использую php.ini у которой удалил приставку "-development"... короче я еще специально сейчас убедился, что выводятся все ошибки.
CODE (text):
скопировать код в буфер обмена
  1. error_reporting = E_ALL
  2. display_errors = On
  3. display_startup_errors = On
  4. ignore_repeated_errors = Off
  5. track_errors = On
  6. html_errors = On
и т.д.

DelphinPRO, так у вас на чем выдаются ошибки, на том приведенном мной примере, и который не меняли?
5. DelphinPRO - 09 Июля, 2014 - 13:05:27 - перейти к сообщению
like_you пишет:
DelphinPRO, так у вас на чем выдаются ошибки

нет-нет, я ошибся Улыбка
ругается, наоборот, при обращении к обычному методу как к статике.
6. LIME - 09 Июля, 2014 - 13:06:03 - перейти к сообщению
Цитата:
error_reporting = E_ALL | E_STRICT

(Добавление)
E_STRICT в E_ALL не входит
7. like_you - 09 Июля, 2014 - 13:23:40 - перейти к сообщению
LIME пишет:
error_reporting = E_ALL | E_STRICT
Начиная с версии 5.4 входит

 

Powered by ExBB FM 1.0 RC1