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]   

> Описание: вроде и есть разница а вот в чем?
DlTA
Отправлено: 20 Июля, 2012 - 12:16:26
Post Id



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


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


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




пример кода
PHP:
скопировать код в буфер обмена
  1. class a{
  2.         public function fa(){
  3.                 echo "a-fa()";
  4.         }
  5. }
  6. a::fa(); // Strict standards: Non-static method a::fa() should not be called statically
  7. // но при этом выводит a-fa()
  8.  


вариант 2
PHP:
скопировать код в буфер обмена
  1. class b {
  2.         static public function fa(){
  3.                 echo "b-fa()";
  4.         }
  5. }
  6. $bO = new b();
  7. $bO->fa(); // b-fa()
  8. // то есть выполняется и никаких ошибок


так вот в чем принципиальная разница, и где эта разница используется?
 
 Top
Stierus Супермодератор
Отправлено: 20 Июля, 2012 - 12:25:20
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Разница начинается тут :

PHP:
скопировать код в буфер обмена
  1. class a{
  2.  
  3.   public $x = 10;
  4.  
  5.   public function fa(){
  6.     echo $this->x;
  7.   }
  8. }
  9. a::fa();


зы
А вообще это мягкотелось авторов пхп, поощряющих говнокод, в любом другом нормальном языке это вызвало бы ошибку.
 
My status
 Top
DlTA
Отправлено: 20 Июля, 2012 - 12:27:23
Post Id



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


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


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




Stierus пишет:
class a{
 
  public $x = 10;
 
  public function fa(){
    echo $this->x;
  }
}
a::fa();

инимы словами, статические методы есть для того чтоб наглядно понимать что они юзают статические совйства и все?
(Добавление)
а в памяти такие методы как занимают место?
 
 Top
Stierus Супермодератор
Отправлено: 20 Июля, 2012 - 12:34:06
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Иными словами статичиские методы - это то, что не относится к объектам. Это конструкция класса. Если ты не создал ни одного экземпляра класса, они могут работать - стат. функции - это как просто функция, не привязанная ни к чему, просто входит в состав класса для удобства поиска, логического разделения или просто маразма от.

Нестатические функции - это то, что работает с конкретными экземплярами класса, с объектами. Конкретные экземпляр класса "a" может иметь свое значение $x и нестатические методы работают с данными именно этого объекта. В то время как попроси статическую функция вывести переменную $x объекта
PHP:
скопировать код в буфер обмена
  1. class a{
  2.  
  3.   public $x = 10;
  4.  
  5.   public function fa(){
  6.     echo $this->x;
  7.   }
  8. }
  9. $a1 = new a();
  10. $a2 = new a();
  11. $a2->x = 5;
  12. $a3 = new a();
  13. $a3->x = 58;
  14. a::fa();
- в какой из объектов ей смотреть, если их три?
(Добавление)
Цитата:
а в памяти такие методы как занимают место?
Про память лучше не спрашивай, весть пых написан на своем си-говно-фреймворке со своим подсчетом ссылок, выделением памяти и прочим, там много структур разных и ответ на твой вопрос зависит от многих факторов - пока не заморачивайся. Если реально будет интересно - открывай исходники и смотри, на форуме ты не найдешь человека, который тебе на подобные вопросы ответит.
 
My status
 Top
DelphinPRO
Отправлено: 20 Июля, 2012 - 12:43:59
Post Id



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


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


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




статические методы выполняются в контексте класса, нестатические - в контексте объекта.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Stierus Супермодератор
Отправлено: 20 Июля, 2012 - 12:44:24
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




только сейчас увидел, что ты про методы. С методами все проще - методы не дублируются для разных объектов, метод один, ему ток области данных, в зависимости от объекта, разные подсовываются.
 
My status
 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