Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP5] Notacja $object -> child_class -> function()
Forum PHP.pl > Forum > Przedszkole
Ziels
Dziś postanowiłem w końcu wyemigrować na PHP5, i mam problem. Powiedzmy że dany jest taki kod:

  1. <?php
  2. class parent_class{
  3. public function do_something(){
  4. $this -> child -> show_something();
  5. return true;
  6. }
  7. }
  8. class child extends parent_class{
  9. public function show_something(){
  10. echo 'Something';
  11. }
  12. }
  13. $parent = new parent_class;
  14. $parent -> do_something();
  15. ?>


To ostatnie polecenie jednak nie zadziała, jakie warunki muszą być spełnione żeby było OK?
UDAT
I w tym kodzie jest błąd:
  1. <?php
  2. $this -> child -> show_something();
  3. ?>


Odwołujesz się do metody show_something() obiektu przypisanego do właściwości child danego obiektu.

To co ty chcesz zrobić można zrobić tak:
  1. <?php
  2. abstract class parent_class{
  3. public function do_something(){
  4. $this -> show_something();
  5. return true;
  6. }
  7.  
  8.  abstract public function show_something();
  9. }
  10.  
  11. class child extends parent_class{
  12. public function show_something(){
  13. echo 'Something';
  14. }
  15. }
  16. $parent = new child;
  17. $parent -> do_something();
  18. ?>


Klasa rodzica nie ma dostępu do metod klasy pochodnej jak własnych.
Tak jest tylko w przeciwnym przypadku.
LBO
Agregacja:
  1. <?php
  2. // Parent agreguje Child
  3. class ParentClass
  4. {
  5. /*
  6.  * @var Child
  7.  */
  8. private $_child;
  9.  
  10. public function __construct()
  11. {
  12. $this->_child = new ChildClass();
  13. }
  14.  
  15. public function doSomething()
  16. {
  17. $this->_child->showSomething();
  18. }
  19. }
  20.  
  21. class ChildClass
  22. {
  23. public function showSomething()
  24. {
  25. print 'Something!';
  26. }
  27. }
  28.  
  29. $parent = new ParentClass();
  30. $parent->doSomething();
  31. ?>
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.