Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa główna i podklasy
busterek
post
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Łódź

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


Witajcie.
Dręczy mnie jeden problem, natury projektowej. Stowrzyłem jakiś czas temu zbiór funkcji, głównie dla siebie, które pomagają mi przy towrzeniu różnych projektów. Funkcje te, połączyłem w klasy. Wszystko działa, jednak gdy towrzę moduły, to środowisko IDE (NetBeans) nie podpowiada mi funkcji. Może przytoczę przykład:

  1. <?php
  2.  
  3. class site
  4. {
  5. var $class1;
  6. var $class2;
  7.  
  8. function site()
  9. {
  10. $this->class1 = new class1();
  11. $this->class2 = new class2();
  12. }
  13. }
  14.  
  15. class class1
  16. {
  17. function klasa1funkcja1()
  18. {
  19. echo 'To jest funkcja 1 w klasie 1.<br />';
  20. }
  21. function klasa1funkcja2()
  22. {
  23. echo 'To jest funkcja 2 w klasie 1.<br />';
  24. }
  25. }
  26.  
  27. class class2
  28. {
  29. function klasa2funkcja1()
  30. {
  31. echo 'To jest funkcja 1 w klasie 2.<br />';
  32. }
  33. function klasa2funkcja2()
  34. {
  35. echo 'To jest funkcja 2 w klasie 2.<br />';
  36. }
  37. }
  38.  
  39. $site = new site();
  40.  
  41. $site->class1->klasa1funkcja1();
  42. $site->class1->klasa1funkcja2();
  43. $site->class2->klasa2funkcja1();
  44. $site->class2->klasa2funkcja2();
  45.  
  46. ?>


W momencie kiedy piszę kod i nacisnę kombinację ctrl + spacja po napisaniu $site-> podpowiada mi zmienne i funkcje klasy site. Kiedy wybiorę podklasę class1, czyli w kodzie mam następującą konstrukcję: $site->class1-> i nacisnę wyżej wspomnianą kombinację klawiszy, wtedy NetBeans stwierdza, że nie może mi nic podpowiedzieć. Po wpisaniu funkcji z palca wszystko działa. Jednak jest to uciążliwe, gdyż muszę pamietać kilkadziesiąt funkcji zapisanych w podklasach. Czy da się jakoś to zrobić, aby to działało??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A niby skad Twoj edytor ma wiedziec, ze akurat obiekt class1 jest obiektem klasy Class1? Takie rzeczy mowi sie poprzez odpowiednie komentarze przy deklaracji wlasciwosci klasy.

Poczytaj o PHPDoc
Go to the top of the page
+Quote Post
Tuminure
post
Post #3





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


Zamień
  1. function site()
na
  1. function __construct()

i gotowe (IMG:style_emoticons/default/wink.gif) .

Cytat
A niby skad Twoj edytor ma wiedziec, ze akurat obiekt class1 jest obiektem klasy Class1?

Stąd, że tworzy przecież te obiekty.
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Jeśli korzystasz z NB to PHPDoc bardzo ładnie będzie CI podpowiadał metody klas o ile tylko dobrze użyjesz annotacji/komentarzy czyli /** @costam costam */ - nie chcę za dużo podpowiadać.

Dodam jedynie, że NB sam ładnie generuje PHPDoc'a jeśli zaczniesz wpisywać /** i dasz [enter] nad deklaracją funkcji/klasy/metody/zmiennej itd - musisz tylko wówczas uzupełnić dany komentarz. Fajnym i przydatnym skrótem do dokumentowania zmiennych wewnątrz kodu jest kombinacja klawiszy "vdoc[tab]" nad zmienną, którą chcesz opisać.
)
Trochę razi mnie w oczy przedpotopowa obiektówka jaką tu pokazałeś. Na dzień dzisiejszy trzeba by przepisać klasę "site":

  1. class site
  2. {
  3. public $class1;
  4. public $class2;
  5.  
  6. function __construct()
  7. {
  8. $this->class1 = new class1();
  9. $this->class2 = new class2();
  10. }
  11. }


i trzymać się tego (IMG:style_emoticons/default/wink.gif)

EDIT: zmieniłem dostęp z private na public - ze względu na wykrozystanie przez autora tematu - proponowałbym tu jednak zastosować gettery.

Ten post edytował Sephirus 1.10.2013, 14:26:40
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Tuminure do tego sluzy PHPDoc jak juz pisalem i jak pisal Sephirus.

A jak jakis geniusz zrobi tak:
$this->class1 = new class1();
a potem
$this->class1 = new class2();

To skad edytor ma wiedziec co podpowiadac?
Go to the top of the page
+Quote Post
Tuminure
post
Post #6





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


Nie przeczę, że tworzenie PHPDoca to zły pomysł, jednak NB rozpoznaje metody bez tego.

Cytat
To skad edytor ma wiedziec co podpowiadac?

Na podstawie analizy kodu prawdopodobnie. Nie mam nic wspólnego z kodem źródłowym NB, więc nie wiem czemu to działa ale działa - powiedziałbym, że działa dokładnie tak jak chcę (i jak uważam, że powinien), podczas testowania przykładu podanego przez Ciebie.

Ten post edytował Tuminure 1.10.2013, 13:53:39
Go to the top of the page
+Quote Post
webmaniak
post
Post #7





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Cytat(Sephirus @ 1.10.2013, 10:46:01 ) *
[...] Fajnym i przydatnym skrótem do dokumentowania zmiennych wewnątrz kodu jest kombinacja klawiszy "vdoc[tab]" nad zmienną, którą chcesz opisać.[...]

Mógłbyś bardziej to opisać? o jakie klawisze chodzi?
Go to the top of the page
+Quote Post
buliq
post
Post #8





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Cytat(Tuminure @ 1.10.2013, 14:52:32 ) *
Nie przeczę, że tworzenie PHPDoca to zły pomysł, jednak NB rozpoznaje metody bez tego.


A jaki jest zakres dla którego NB rozpoznaje?
Nie jest to system idealny, a odpowiednie udokumentowanie typów mu to ułatwia i nie ma opcji żeby źle podpowiedział.
Go to the top of the page
+Quote Post
Sephirus
post
Post #9





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


@Tuminure - masz rację w przypadku konstruktora NB sobie poradzi i będzie wiedział co podpowiedzieć dla danej własności klasy/obiektu. Mimo to bardzo dobrą praktyką jest komentowanie i używanie PHPDoc. Jeśli własność będzie inicjalizowana w metodzie "x" a nie konstr. to po jej wywołaniu NB już tego nie załapie niestety bo nie może przetwarzać całego kodu (IMG:style_emoticons/default/wink.gif)

@webmaniak

Masz np coś takiego:

  1.  
  2. $c = $registry['config']['dev']['cache']; // czysta teoria - ciężko żeby NB połapał się co jest na tym poziomie zagłębienia tablicy.
  3.  


Powiedzmy, że pod $c wrzuci Ci obiekt klasy My_Cache_Class do obsługi cacheowania czegośtam na stronie. Chcesz żeby po wpisaniu $c-> podpowiedziało Ci metody.

Robisz tak:

stawiasz kursor nad zmienną $x, naciskasz po kolei literki v,d,o,c (skrót - VDOC) i naciskasz [tab]. Inaczej mówiąc wpisujesz słowo vdoc i naciskasz TAB.

Pojawi Ci się coś takiego:

  1. /* @var $c ClassName */
  2. $c = $registry['config']['dev']['cache']; // czysta teoria - ciężko żeby NB połapał się co jest na tym poziomie zagłębienia tablicy.


podmieniasz "ClassName" na to co potrzebujesz i już (nazwa klasy itp):

  1. /* @var $c My_Cache_Class */ // ot taki przykład
  2. $c = $registry['config']['dev']['cache']; // czysta teoria - ciężko żeby NB połapał się co jest na tym poziomie zagłębienia tablicy.


Ten post edytował Sephirus 1.10.2013, 14:21:00
Go to the top of the page
+Quote Post
webmaniak
post
Post #10





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Dzięki, nie zaczaiłem na początku z tym vdoc (IMG:style_emoticons/default/smile.gif) jeśli znasz więcej takich skrótów, albo link do jakiś artykułów i chciałbyś się podzielić to będę wdzięczny za wiadomość na priv (IMG:style_emoticons/default/smile.gif) - nie chce już tu robić off-topa (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
busterek
post
Post #11





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Łódź

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


A słuchajcie. Bo kiedy mam kod, jak zaprezentowany, to działa wyśmienicie. Zmienne podpowiadają się wspaniale. Ale kiedy klasy przerzucie do oddzielnych plików, a następnie w pliku index.php dołącze je poprzez require_once, to wtedy podpowiada tylko zmienną z klasy site, a dalej już nie. I teraz nie wiem, czy to jest wina NB, czy czegoś innego. Podpowiecie?
Go to the top of the page
+Quote Post

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: 24.08.2025 - 19:54