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. DlTA - 20 Июля, 2012 - 12:16:26 - перейти к сообщению
пример кода
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. // то есть выполняется и никаких ошибок


так вот в чем принципиальная разница, и где эта разница используется?
2. Stierus - 20 Июля, 2012 - 12:25:20 - перейти к сообщению
Разница начинается тут :

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


зы
А вообще это мягкотелось авторов пхп, поощряющих говнокод, в любом другом нормальном языке это вызвало бы ошибку.
3. DlTA - 20 Июля, 2012 - 12:27:23 - перейти к сообщению
Stierus пишет:
class a{
 
  public $x = 10;
 
  public function fa(){
    echo $this->x;
  }
}
a::fa();

инимы словами, статические методы есть для того чтоб наглядно понимать что они юзают статические совйства и все?
(Добавление)
а в памяти такие методы как занимают место?
4. Stierus - 20 Июля, 2012 - 12:34:06 - перейти к сообщению
Иными словами статичиские методы - это то, что не относится к объектам. Это конструкция класса. Если ты не создал ни одного экземпляра класса, они могут работать - стат. функции - это как просто функция, не привязанная ни к чему, просто входит в состав класса для удобства поиска, логического разделения или просто маразма от.

Нестатические функции - это то, что работает с конкретными экземплярами класса, с объектами. Конкретные экземпляр класса "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();
- в какой из объектов ей смотреть, если их три?
(Добавление)
Цитата:
а в памяти такие методы как занимают место?
Про память лучше не спрашивай, весть пых написан на своем си-говно-фреймворке со своим подсчетом ссылок, выделением памяти и прочим, там много структур разных и ответ на твой вопрос зависит от многих факторов - пока не заморачивайся. Если реально будет интересно - открывай исходники и смотри, на форуме ты не найдешь человека, который тебе на подобные вопросы ответит.
5. DelphinPRO - 20 Июля, 2012 - 12:43:59 - перейти к сообщению
статические методы выполняются в контексте класса, нестатические - в контексте объекта.
6. Stierus - 20 Июля, 2012 - 12:44:24 - перейти к сообщению
только сейчас увидел, что ты про методы. С методами все проще - методы не дублируются для разных объектов, метод один, ему ток области данных, в зависимости от объекта, разные подсовываются.

 

Powered by ExBB FM 1.0 RC1