Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Domyślny argument metody i $this
ocochodzi
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 2
Dołączył: 27.02.2007

Ostrzeżenie: (0%)
-----


kod:

  1. <?php
  2. class A
  3. {
  4. public function Trzy()
  5. {
  6. return 3;
  7. }
  8. public function Pisz($par = $this->Trzy())
  9. {
  10. echo $this->Trzy();
  11. }
  12. }
  13.  
  14. $a = new A();
  15. $a->Pisz();
  16. ?>


w linii 8 daje błąd składni. Ten $this najwyrazniej w tym miejscu nie ma prawa wystąpić.


Chcę by domyślna wartość parametru metody była liczona przez inną metodę obietu. Problem mogę obejść konstrukjcją:

  1. <?php
  2. class A
  3. {
  4. public function Trzy()
  5. {
  6. return 3;
  7. }
  8. public function Pisz($par = 'sztuczny')
  9. {
  10. if($par == 'sztuczny')
  11. $par = $this->Trzy();
  12. echo $par;
  13. }
  14. }
  15.  
  16. $a = new A();
  17. $a->Pisz();
  18. ?>


Tylko, że to już jest łatanie problemu zaciemniajace kod.


Pytania:

1) czy isnieje eleganckie rozwiązanie, tzn. użycie jako argumentu domyslnego tego co chcę. Może jakieś specjalne słówko kluczowe?

2) jeśli odpowiedz na 1) jest negatywna, to czemu? Tzn. czy stoją za tym jakieś głebokie podstawy działania PHP? Jakoś nie widzę, skoro obejście problemu jest automatyczne. Chyba, ze dogmat o ograniczeniu $this do ciała metody.

Ten post edytował ocochodzi 25.06.2008, 18:31:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


1. Istnieją dwa eleganckie rozwiązania, ale żadne nie jest zgodne z twoimi oczekiwaniami:
  1. <?php
  2. // albo tak
  3. class A
  4. {
  5. public function Trzy()
  6. {
  7. return 3;
  8. }
  9. public function Pisz($par = null)
  10. {
  11. echo is_null($par) ? $this->Trzy() : $par;
  12. }
  13. }
  14.  
  15. $a = new A();
  16. $a->Pisz();
  17.  
  18. // albo tak
  19.  class A
  20.  {
  21.  public function Trzy()
  22.  {
  23.  return 3;
  24.  }
  25.  public function Pisz($par)
  26.  {
  27.  echo $par;
  28.  }
  29.  }
  30.  
  31.  $a = new A();
  32.  $a->Pisz($a->Trzy());
  33. ?>


2. To nie ma nic wspólnego z zasięgiem $this. to wynika wprost ze składni i gramatyki PHP - parametrem domyślnym funkcji może być wyłącznie stała - nie wolno stosować zmiennych lub rezultatów funkcji.

a oba powyższe rozwiązania nie są żadnym obejściem problemu. to twoja koncepcja niejawnego przekazywania zmiennego parametru jest niezgodna ze standardami programowania i niepotrzebnie zaciemnia kod. a dlaczego? bo patrząc zarówno na miejsce wywołania jak i na definicję metody Pisz nie możemy wywnioskować rezultatów jej działania
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 00:40