Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dodawanie funkcji do klasy
Forum PHP.pl > Forum > PHP
zietek
Witam!

Kod
<?
class klasa{

  function licz(&$w){$w=1;}

  function tekst(){
   self::licz($wynik);
   print($wynik);
  }

}

$a=new klasa();
$a->tekst();
?>


Zasada dzialania jest taka:
Tworze obiekt na podstawie klasa, ktora zawiera metode 'tekst' wyswietlajaca wynik. Sam wynik naliczany jest za pomoca funkcji licz().

Wszystko dziala pieknie, ale sama fukcja licz nie jest w moim przypadku zawsze taka sama. Tzn tworzac obiekt $a (potem $b, potem $c) chcialbym moc zdefiniowac z nim fukcje licz() o osobna dla kazdego przypadku. Cala reszta klasy pozostaje bez zmian (a nie jest krotka).
Bardzo zalezy mi na tym aby nie wklepywac do programu 100 razy tej samej klasy w wersjach ze zmieniona tylko funkcja licz().

Z obiektowki raczkuje a chcac rozwiazac ten problem przychodza mi do glowy rozne pomysly:

1) a) tworze obiekt $a na podstawie klasy, ktora celowo nie zawiera fukcji licz
b) definiuje w stworzonym obiekcie funkcje licz() i mam w pelni funkcjonalny obiekt

2) Przed utowrzeniem obiektu $a nadpisuja fukcje licz w klasie

3) a) tworze kopię o nazwie klasa2 na podsatwie klasy (nie zawierajacej fukcji licz) dodajac do niej fukcje licz()
b) tworze obiekt $a na podstawie nowej klasa2

Wszystkie przypadki teoretycznie prowadza do celu, jednak nie wiem, ktore z nich sa mozliwe do wykonania w PHP. A jezeli nie jeden to ktory najlepiej wybrac?
Prosze o maja podpowiedz (kod) jak to zrealizowac.
nevt
o dziedziczeniu w programowaniu obiektowym coś słyszałeś ? jak nie to pogoogluj w tym temacie. tu masz prosty przykład o co w tym chodzi.
  1. <?php
  2. class a
  3. {
  4. public function count()
  5. {
  6.  return 'Metoda COUNT klasy A';
  7. }
  8.  
  9. public function test()
  10. {
  11. return 'Metoda TEST klasy A';
  12. }
  13. }
  14.  
  15. class b extends a
  16. {
  17. public function count()
  18. {
  19.  return 'Metoda COUNT klasy B';
  20.  }
  21. }
  22.  
  23. $x = new a();
  24. $y = new b();
  25.  
  26. echo $x->test(); echo '<br />';
  27. echo $x->count(); echo '<br />';
  28. echo $y->test(); echo '<br />';
  29. echo $y->count(); echo '<br />';
  30. ?>
Cysiaczek
Jeśli masz nerwy i naprwdę Ci się nudzi, to możesz w locie zmienić tą metodę na inną.
http://www.php.net/manual/pl/ref.runkit.php

Pozdrawiam.
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.