2013-01-10 10 views
12

Czy można rozszerzyć podpowiedzi typu za pomocą innego znacznika documentor w Netbeans?Rozszerzanie typów dla PHP

Poszukuję sposobu na rozszerzenie podpowiedzi typu za pomocą znacznika @scope, który pozwoliłby na dołączanie plików w celu uzyskania dostępu do zakresu obiektów.

Przykład:

file: template.php 
<?php /* @var $this MyObject */ 

Pozwoliłoby to tylko dla typu podpowiadania zmiennych publicznych i metod. Co mam nadzieję zrobić to przedłużyć typu podpowiedzi z tagiem @scope umożliwiając jej, aby uzyskać dostęp do zakresu myObject:

file: template.php 
<?php /* @scope MyObject */ 

co uczyniłoby zawartość pliku zachowywać się jak byłoby w zakresie MyObject i $this wskazałby prywatne metody.

Nie mam doświadczenia w tworzeniu platformy Netbeans, ale mam doświadczenie z Java. Gdybym chciał to osiągnąć, od czego miałbym zacząć?

Mam nadzieję, że nie jest to zbyt słabe pytanie.

+0

Poszukuję również czegoś podobnego, wyjaśnionego w [link] (https://platform.netbeans.org/tutorials/nbm-java-hint.html#creatingthemoduleproject). Jednak chcę go dla php, podczas gdy link wyjaśnia tylko jak to zrobić dla java –

Odpowiedz

2

W przeszłości (starsze wersje NetBeans), podpowiedź typu pokazywała wszystkie metody z klasy (której obiekt był w użyciu), tj. Wszystkie publiczne, chronione, prywatne, a nawet statyczne metody. Teraz, w nowych wydaniach NetBeans, naprawiono ten błąd , a gdy podpowiedzi typu na temat obiektu dotyczą tylko dostępnych metod/właściwości, są one typowane.

Jest to po prostu dlatego, że Twój szablon nie może uzyskać dostępu/wywołać prywatnej własności/metody klasy, a także jeśli masz obiekt (wystąpienie klasy) Nie powinieneś mieć dostępu do/wywołać jego statycznych właściwości klasy/metody.

To samo dotyczy, jeśli jesteś skłonny do wpisania podpowiedzi wewnątrz klasy - teraz podpowiedź typu wymienia wszystkie publiczne, chronione i prywatne metody dla $this->| (| jest kursorem), podczas gdy statyczne właściwości i metody są nadal nie wymienione. Z drugiej strony, jeśli jesteś podpowiedź typu na MyClass::| teraz tylko statyczne właściwości/metody są wymienione i ponownie, gdy wewnątrz klasy MyClass wszystkie publiczne, chronione i publiczne są wymienione podczas uzyskiwania dostępu spoza prywatnych są (bardzo poprawnie) brakuje na liście.

Funkcjonalność, o którą prosisz, jest błędna i odmawia właściwych zasad enkapsulacji.

+1

Może to być prawda dla Javy lub innych języków, ale PHP pozwala rozszerzyć zakres klasy na inny plik. Takie zachowanie uzyskuje się po prostu przez 'include' inny plik wewnątrz metody klasy. W takim przypadku plik ma dostęp do wszystkich metod i właściwości otaczającej klasy (nawet prywatnej). Mechanizm jest bardzo podobny do "klas częściowych" w innych językach, poza tym, że nie ma formalnej składni w PHP i trzeba używać podpowiedzi typu. Mechanizm ten jest bardzo często używany przez szablony widoków wielu frameworków PHP. Niezależnie od tego, czy jest to dobra praktyka, czy nie. –

+0

Powiedziałbym, że jest to całkiem dobra praktyka, ponieważ całkowicie oddzielasz znaczniki od kodu. Tj. Tworzę widok "CreateUserView -> CreateUserView.php" i wraz z tym plikiem tworzę również szablon jako 'CreateUserView.tpl.php' który mój rozszerzony Widok' CreateUserView' automatycznie ładuje, a szablon jest częścią klasy z tym samym zakresem. – Daniel

0

Wiem, że nie powinniśmy sugerować żadnych narzędzi, ale czasami nie mogę oprzeć się wrażeniu, że ludzie próbują rozwiązać problemy ze złym. NetBeans w mojej opinii powoli podąża za etapami Eclipse, które prawie całkowicie porzuciły wsparcie dla PHP w czasie. Istnieją jednak inne IDE ściśle zaprojektowane dla języka PHP, które rozwiązują niektóre problemy po wyjęciu z pudełka.

Osobiście chcę narzędzia, które zapewni mi największą funkcjonalność od samego początku. Nie interesuje mnie pisanie wtyczek, które zabierają mi trochę czasu i mogą być przestarzałe. Wybrałem komercyjne IDE, które daje mi więcej niż potrzebuję, a przy okazji - idealnie odpowiada na twoje potrzeby zawarte w pytaniu. Jeśli masz zamiar napisać kod PHP, zdecydowanie sugeruję, abyś rozważył zapłacenie za profesjonalne narzędzie.

O samym problemie podam przykładowy link do żądania funkcji, który pokazuje, w jaki sposób problem został zgłoszony: Allow protected member access on @var $this (i.e. in views). Istnieje również wiele innych, related features, które mogą Cię zainteresować.

Podsumowując, moja opinia brzmi: jeśli chcesz dokręcić śrubę, użyj śrubokręta, a nie młotka.