Witam

Mam takie pytanie, bo spotkałem się w jakiejś dokumentacji że metod statycznych nie można wywoływać mając utworzony obiekt klasy czyli

  1. <?php
  2. class klasa {
  3.  
  4.  public static function statyczna() {
  5.  
  6.   echo 'funkcja statyczna';    
  7.    }
  8.  
  9.    public function niestatyczna() {
  10.    
  11.     echo 'funkcja niestatyczna';
  12.  
  13.     }
  14.  
  15. }
  16.  
  17. klasa::statyczna ///wywołanie poprawne
  18.  
  19. $klasa = new klasa();
  20. $klasa->statyczna //niby niepoprawne ale normalnie mi to funkcjonuje
  21. ?>


Poza tym wywołanie metody niestatycznej w taki sposó też działa (choć jest komunikat E_STRICT)

  1. <?php
  2. klasa::niestatyczna;
  3. ?>


Poza tym self:: służy niby do wywoływania metod statycznych ale jak zrobie takie wywołanie

  1. <?php
  2. class klasa {
  3.  
  4.  public static function statyczna() {
  5.  
  6.   echo 'funkcja statyczna';  
  7.    self::niestatyczna;
  8.    }
  9.  
  10.    public function niestatyczna() {
  11.    
  12.     echo 'funkcja niestatyczna';
  13.  
  14.     }
  15.  
  16. }
  17.  
  18. klasa::statyczna; //działa wewnątrz odwołanie self do niestatycznej metody
  19. ?>


gdzie self sięodwołuje do metody niestatycznej to też działa.

Więc jak to jest z tymi metodami bo z tego co widzę to niezależnie czy jest ona static czy nie to można odwołać się do niej przez :: oraz -> (ewentualny komunikat E_STRICT). Oczywiście zakładamy że odrzucam wszędzie zastosowanie $this (żeby poprawnie odwołać się za pomocą :: )