![]() |
![]() |
![]()
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ź. |
|
|
![]() |
![]()
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:
-------------------- ![]() ![]() |
|
|
![]()
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 -------------------- |
|
|
![]()
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... -------------------- ![]() ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 14:59 |