Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Dynamiczne tworzenie metod
Crozin
post
Post #1





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Mam sobie jakas klase (oczywiscie to tylko schemat (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ):
  1. <?php
  2. class Cos{
  3. //pola
  4.  
  5. public function a(){}
  6. public function b(){}
  7. public function c(){}
  8. public function d(){}
  9. //i jeszcze kilka...
  10. }
  11. ?>

zawartosc metod jest dosc dluga, a musze teraz dodac jeszcze kilka/kilkanascie, nie chce robic klasy ktora bedzie zbym dluga (pod wzgledem linijek) głównie za wzgledu na czytelnosc... bardzo wyglodnym rozwiazaniem bylo by zapisanie kilku metod w osobnych plkach, jednak powstaje tu pewnen probelm :/ Nie znalazlem niczego co by umozliwiało zrobienie czegos takiego:
  1. <?php
  2. class Klasa{
  3. //pola
  4.  
  5. public function a(){}
  6. public function b(){}
  7. public function c(){}
  8.  
  9. include('metodaD.php'); 
  10. }
  11. ?>

przeszukalem manual (Function Handling Functions) ale niczgo nie znalazlem... moglbym robic to w ten sposob:
  1. <?php
  2. //....
  3. public function d(){
  4. include('metodaD.php');
  5. }
  6. ?>
ale to jest ostateczne rozwiazanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Tak wiec... czy istnieje sposob na "dynamiczne" stworzenie, ale wczytanie z innego pliku metod?

Ten post edytował Crozin 10.04.2007, 14:35:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Po co? Klasa, jako obiekt służy do enkapsulacji - trzymania w jednym miejscu powiązanych ze sobą danych. To samo tyczy się metod. Nie wiem po co chcesz to dzielić na pliki. Mija się to z filozofią OOP.


edit:

Co do pytania. Można tak zrobić:
Plik: Klasa.php
  1. <?php
  2.  
  3. class Klasa
  4. {
  5. public function metodaB($hello) {
  6. $this->hello = $hello;
  7. include('metodaB.php');
  8. }
  9. }
  10. $kl = new Klasa();
  11. $kl->metodaB('hello world!');
  12. ?>

Plik: metodaB.php
  1. <?php
  2. print($this->hello);
  3. ?>


Uruchomienie kodu w pliku Klasa.php spowoduje, wyświetlenie sie na "hello world". Czyli tak jak chciałeś.
Przy odrobinie zawzięcia i metod magicznych, można by to zautomatyzować.

edit:

Pamiętaj, że uruchomienie pliku metodaB.php nie w kontekście obiektu, spowoduje błąd parsera.

edit:

Oh, przepraszam, źle doczytałem Twoje pytanie. Jeżeli chodzi Tobie o dzielenie definicji klasy na pliki, to nie da rady. W manualu powinno być napisane, przynajmniej w User Notes.

Ten post edytował LBO 10.04.2007, 15:04:27
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: 13.10.2025 - 10:10