Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wymuszenie sposobu wywoływania metod
Forum PHP.pl > Forum > Przedszkole
muk4
Można wywołać metody takimi sposobami:
  1. class Klasa{
  2. public function metoda(){
  3. return 'metoda';
  4. }
  5. };
  6.  
  7. echo Klasa::metoda(); //1 sposób
  8.  
  9. $obj = new Klasa(); //2 sposób
  10. echo $obj->metoda();

Chciałbym wymusić korzystanie z pierwszego lub drugiego sposobu np. metody nie można wywołać, gdy nie utworzyliśmy egzemplarza klasy (przy sposobie 1 wywali błąd).

Na PHPEdia.pl na temat Static wyczytałem, że:
Cytat
Deklaracja klasy lub metody jako statycznej czyni ją dostępną bez konieczności inicjowania obiektu danej klasy.

A jednak nie zadeklarowałem metody w przykładzie jako statycznej i sposób 1 działa. Czemuż to?
Spawnm
Masz ukryte błędy , daj na początku kodu:
  1. error_reporting(E_ALL|E_STRICT);
skarabe.pl
Jeżeli chcesz rozpoznać sposób wywołania funkcji, to możesz użyć warunku isset($this):

  1. class abc {
  2. public function def()
  3. {
  4. return isset($this);
  5. }
  6. }
  7.  
  8. $o = new abc();
  9.  
  10. $a = abc::def(); // boolean false
  11. $b = $o->def(); // boolean true
muk4
Cytat(Spawnm @ 8.08.2010, 20:41:46 ) *
Masz ukryte błędy , daj na początku kodu:
  1. error_reporting(E_ALL|E_STRICT);

Faktycznie:
Cytat
Strict Standards: Non-static method Klasa::metoda() should not be called statically in C:\xampp\xampp\htdocs\test2.php on line 9


@skarabe.pl
O to mi chodziło thx smile.gif
wookieb
I dla każdej metody będziesz to sprawdzał?
muk4
Cytat(wookieb @ 8.08.2010, 21:05:37 ) *
I dla każdej metody będziesz to sprawdzał?

Nie, tylko 2 które muszą być wywoływane statycznie.
skarabe.pl
Cytat(muk4 @ 8.08.2010, 21:12:45 ) *
Nie, tylko 2 które muszą być wywoływane statycznie.

W tę stronę to lepiej będzie zadeklarować funkcję jako statyczną: public static function metoda()
muk4
Cytat(skarabe.pl @ 8.08.2010, 21:59:11 ) *
W tę stronę to lepiej będzie zadeklarować funkcję jako statyczną: public static function metoda()

Wywala tylko ostrzeżenie dla E_STRICT, ale nie przerywa skryptu. Chciałbym też to drugie tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.