Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywolanie metod prywatnych/chronionych/publicznych, Call to protected method...
Milczar
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 13.12.2005

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


Mam może lamerski problem...
Mam klase w której mam zadeklarowane metody, częśc metod jest PUBLIC a czesc PRIVATE (zeby potomek klasy nie mial dostepu do nich). Powiedzmy niech klasa nazywa sie TEST. a metoda prywatna METODA_TESTOWA.

W kodzie tworze obiekt klasy test (wrzucam go w zmienna sesyjna).
$_SESSION['aaa'] = new TEST();
Nastepnie pare linijek niżej wywoluje:
$_SESSION[aaa']->METODA_TESTOWA().

Efektem na stronie jest:
Fatal error: Call to private method TEST::METODA_TESTOWA() from context '' in c:\wamp\www\index2.php on line 18

Taki sam efekt jest jak mam metode PROTECTED. Poprawnie wywołuja się jedynie metody PUBLIC. Czemu? Co robie źle, ze nie moge wywolac metod prywatnych/chronionych z obiektu klasy, w ktorej sa one zdefiniowane? nie można ich wywoływac wogóle?

Pozdrawiam i z góry dzięki za odpowiedź.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
ennics
post
Post #2





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


Cytat
nie można ich wywoływac wogóle?

nie można. Dlatego że są prywatne, tzn nie są dostępne dla klas dziedziczących
i z zewnątrz. Rozwiązania są dwa, oznaczyć metodę jako public, lub zdefiniować metodę akcesora:
  1. <?php
  2.  
  3. class Foo {
  4. private function metoda() {
  5. return 1;
  6. }
  7.  
  8. public function getMetoda() {
  9. return $this -> metoda();
  10. }
  11. }
  12.  
  13.  
  14. ?>


--------------------
Go to the top of the page
+Quote Post
dtb
post
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


ennics: klsa dziedziczaca nie ma dostepu do metoda() ale ma dostep do getMetoda() ktora ja wywoluje wiec twoje rozwiazanie nic nie da.
Ustaw metode jako public i daj wewnatrz jej warunek sprawdzajacy w jakiej klasie sie znajduje. kiedy nazwa klasy w ktorej sie znajdu == nazwa klasy rodzica to wykonuje kod, inacze rzuca wyjatek


--------------------
Go to the top of the page
+Quote Post
ennics
post
Post #4





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


Cytat
klsa dziedziczaca nie ma dostepu do metoda() ale ma dostep do getMetoda() ktora ja wywoluje wiec twoje rozwiazanie nic nie da.

nie kumam... a miało coś dać poza dostępem do metody prywatnej ?

Cytat
Ustaw metode jako public i daj wewnatrz jej warunek sprawdzajacy w jakiej klasie sie znajduje. kiedy nazwa klasy w ktorej sie znajdu == nazwa klasy rodzica to wykonuje kod, inacze rzuca wyjatek


Nie wyraziłeś się zbyt jasno, masło maślane... Deklarując metodę jako public jawnie zgadzasz się żeby była wywoływana w klasach pochonych i z zewnątrz. Chcesz definiować dwie klasy o takich samych nazwach ? Po co ? rzuć jakiś kod...


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 14:59