Tomasz Zadora

Tomasz Zadora programuję

Temat: Netbeans a interfejsy PHP

Witam,

powiedzmy, że mam interfejs który jest zaimplementowany przez kilkadziesiąt klas.

Teraz dokładam nową metodę do interfejsu, czy jest jakiś sposób w Netbeans aby w ramach tego samego projektu nowa metoda interfejsu pojawiła się we wszystkich klasach które go implementują, to samo tyczy się zmiany nazwy metody, lub usunięcia metody z interfejsu?

Wiem, że ten problem mogę rozwiązać stosując adapter a następnie dziedzicząc z adaptera, ale nie chcę tego robić - chociażby dlatego, że klasy czasem implementują więcej niż jeden interfejs.

Nie daje tego na grupę NB bo jest prawie martwa, tutaj pewnie jest więcej ludzi którzy korzystają z PHP i Netbeans.
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

Witam, i ja się podczepię pod pytanie,
co dodać żeby NetBeans ładnie rozwijał mi metody z klas ładowanych autoloaderem a nie przez include
wiadomo można się pobawić tagiem @var, ale tak z automatu by się chciało.

Pozdr.
Marcin Mackiewicz

Marcin Mackiewicz Programista JAVA, RS
Adware Polska

Temat: Netbeans a interfejsy PHP

Jeżeli stosujesz dodatkową metodę w nowych klasach i nie potrzeba implementować tej metody to może poprostu wykonaj
interface NowyInteface extends StaryInterface {
function NowaMetoda();
}
Nie kojarze takiej funkcjonalności w PHP (Netbeans, Aptana, Eclipse) która akurat dla tego języka implementowałaby metody w klasach za programiste. Tu niestety najlepiej wypada Netbeans. Po otwarciu klasy widzę, że jest błąd przy implementacji i klikiem na błąd mogę zaimplementować brakujące metody automatem. Mimo wszystko trzeba wejść do każdej z klas i zrobić to ręcznie.

Co do podpowiadania metod obiektów. Mam wersję Netbeans 7.3 i używanie autoload'a nie przeszkadza mu w podpowiadaniu składni. Zauważyłem jednak, że nie podpowiada składni np przy implementacji wzorca singleton. Zrobiłem sobie na szybko coś takiego
class NpgSQL    {   
private static $__Instance;

public static function getInstance() {
if ( !self::$__Instance ) {
return false;
}
return self::$__Instance;
}

public function __construct() {}
public function metoda1() {}
public function metoda2() {}

} //end class NpgSQL
i wywołanie w kodzie
$test = NpgSQL::getInstance();
powoduje, że potem odnosząc się
$test->
nie podpowiada składni.
Pytanie zadane do wersji NB7.1 w postaci bug'a do wersji zaskutkowało informacją, że jest to do poprawy ale puki co należy stosować /* @var NpgSQL $test */ aby mieć podpowiadanie składni
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

Marcin M.:
Co do podpowiadania metod obiektów. Mam wersję Netbeans 7.3 i używanie autoload'a nie przeszkadza mu w podpowiadaniu składni. Zauważyłem jednak, że nie podpowiada składni np przy implementacji wzorca singleton.

Dokładnie przy singletonie nie podpowiada, nie potrafi rozwinąć zwracanego obiektu ...

Pozd.
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Netbeans a interfejsy PHP

Dokładnie, trzeba użyć komentarzy. Dzięki temu kod jest opisany i bardziej zrozumiały. W pokazanym przykładzie nie ma zbyt wiele rzeczy do opisywania, ale przy większych i bardziej skomplikowanych projektach jest to pomocne.

Wystarczy zatem zamienić:
    private static $__Instance;

public static function getInstance() {
if ( !self::$__Instance ) {
return false;
}
return self::$__Instance;
}
na:
    /**
* Class instance
* @var NpgSQL
*/
private static $__Instance;

/**
* Returns instance of the class
* @return NpgSQL
*/
public static function getInstance() {
aby uzyskać podpowiedzi / sugestie metod i właściwości.
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Netbeans a interfejsy PHP

Tomasz Z.:
powiedzmy, że mam interfejs który jest zaimplementowany przez kilkadziesiąt klas.

Teraz dokładam nową metodę do interfejsu, czy jest jakiś sposób w Netbeans aby w ramach tego samego projektu nowa metoda interfejsu pojawiła się we wszystkich klasach które go implementują, to samo tyczy się zmiany nazwy metody, lub usunięcia metody z interfejsu?

Wiem, że ten problem mogę rozwiązać stosując adapter a następnie dziedzicząc z adaptera, ale nie chcę tego robić - chociażby dlatego, że klasy czasem implementują więcej niż jeden interfejs.

Nie daje tego na grupę NB bo jest prawie martwa, tutaj pewnie jest więcej ludzi którzy korzystają z PHP i Netbeans.
Tomasz, pomocna może być opcja "Find usages" dostępna pod prawym klikiem na nazwie klasy:

Obrazek

Temat: Netbeans a interfejsy PHP

Tomasz Z.:

Teraz dokładam nową metodę do interfejsu, czy jest jakiś sposób w Netbeans aby w ramach tego samego projektu nowa metoda interfejsu pojawiła się we wszystkich klasach które go implementują,

Zdecydowanie bez sensu ale już zaznaczenie klasy (np. podkreślenie na czerwono), że miała coś mieć a tego nie ma już jest ok i tak się to dzieje. I nawet podpowiada, których metod z których interfejsów brakuje i nawet daje możliwość automatycznego wstawienia wszystkich lub tylko wybranych. Dlaczego IDE nie robi tego z automatu? Polecam się zastanowić.
to samo tyczy się zmiany nazwy metody, lub usunięcia metody z interfejsu?

Find Usages jest fajne jak chcemy się zorientować na szybko gdzie dana metoda / klasa / interface jest wykorzystywany. Natomiast to o co pytasz to opcja niżej czyli Rafactor
------------------------------------------------------------------------------------------------------
@Jarosław Czub - O prawidłowym komentowaniu kodu już mi się nawet nie chce gadać.Ten post został edytowany przez Autora dnia 29.08.13 o godzinie 09:29
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

Piotr R.:
@Jarosław Czub - O prawidłowym komentowaniu kodu już mi się nawet nie chce gadać.

Kolego po fachu, mi o prawidłowym komentowaniu też nie musisz pisać bo trochę dłużej programuje nawet od Ciebie :), a bez zaglądania w czyjś kod nawet się nie wypowiadam co kto robi. A w pytaniu chodziło o automatyzację pracy, a nie o "poprawne pisanie komentarzy"

PozdrawiamTen post został edytowany przez Autora dnia 29.08.13 o godzinie 17:55

konto usunięte

Temat: Netbeans a interfejsy PHP

Jarosław C.:
Piotr R.:
@Jarosław Czub - O prawidłowym komentowaniu kodu już mi się nawet nie chce gadać.

Kolego po fachu, mi o prawidłowym komentowaniu też nie musisz pisać bo trochę dłużej programuje nawet od Ciebie :), a bez zaglądania w czyjś kod nawet się nie wypowiadam co kto robi. A w pytaniu chodziło o automatyzację pracy, a nie o "poprawne pisanie komentarzy"

Pozdrawiam

Popcorn w pogotowiu, możecie już porównywać długości... doświadczenia.

Temat: Netbeans a interfejsy PHP

Piotr L.:
Jarosław C.:
Piotr R.:
@Jarosław Czub - O prawidłowym komentowaniu kodu już mi się nawet nie chce gadać.

Kolego po fachu, mi o prawidłowym komentowaniu też nie musisz pisać bo trochę dłużej programuje nawet od Ciebie :), a bez zaglądania w czyjś kod nawet się nie wypowiadam co kto robi. A w pytaniu chodziło o automatyzację pracy, a nie o "poprawne pisanie komentarzy"

Pozdrawiam

Popcorn w pogotowiu, możecie już porównywać długości... doświadczenia.

Z przykrością zawiadamiam, że seans się nie odbędzie z powodu gradobicia na Saharze ;)
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

:)
Niestety również nie wezmę udziału, klawisze zużyły mi się już trochę.

Ps. W sumie gradobicie jest możliwe na Saharze, ale tej naszej Polskiej (Pustynia Błędowska).

Temat: Netbeans a interfejsy PHP

Jarosław C.:
:)
Niestety również nie wezmę udziału, klawisze zużyły mi się już trochę.

Ps. W sumie gradobicie jest możliwe na Saharze, ale tej naszej Polskiej (Pustynia Błędowska).

A tak już na poważnie to o co ci chodziło dokładnie z tym autoloaderem? Bo przy starszych wersjach NetBeans trzeba było odpowiednio komentować kod i nie było znaczenia czy klasa ładowana jest przez autoload, require, include czy łopatą do gara i tak podpowiadał metody pod warunkiem, że klasa znajdowała się w zasięgu projektu lub była podlinkowana.

W wersji 7.3.1 (bo taką obecnie mam) nawet nie trzeba już nic komentować bo elementy składowe klasy i tak podpowiada. Oczywiście typ zwracany i typy argumentów (jeśli typ podstawowy) trzeba dalej ująć w komentarzu.

Może podaj jakiś przykład aby lepiej można było się rozeznać w tym czego szukasz.
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

Prosty przykład,
mam 4 klasy tak dla przykładu, w podanym miejscu nie rozwinie chyba że się doda komentarze typu:

/**
* @var DatabaseMysql $Database
*/


Klasa modelu:
model.php

class Model extends System{
public function foo(){
$this->Database-> [b]TUTAJ NETBEANS NIE ROZWINIE METOD[/b]
}
}


Klasa systemowa łącząca najważniejsze klocki:
system.php

<?php
abstract class System{
protected $Database;
public function __construct(){
$this->Database=new DatabaseMysql();
}
}
?>


Klasy funkcyjne:
database.php

<?php
abstract class Database{
public function db1(){ }
public function db2(){ }
}
?>


databasemysql.php

<?php
class DatabaseMysql extends Database{
public function db2(){
}
public function db3(){
}
}
?>


Moim zdaniem po prostu analizator leksykalny nie może stwierdzić jaki dokładnie obiekt siedzi pod zmienną w takim przypadku, chyba że się jasno wskaże. Ten post został edytowany przez Autora dnia 29.08.13 o godzinie 21:56

Temat: Netbeans a interfejsy PHP

Jarosław C.:

Moim zdaniem po prostu analizator leksykalny nie może stwierdzić jaki dokładnie obiekt siedzi pod zmienną w takim przypadku, chyba że się jasno wskaże.

Zgadza się.

A dlaczego tak się dzieje?
Bo PHP jest dynamicznie typizowane.

Jaki z tego wniosek?
Szukanie automatu na rozwiązanie tego problemu to jak poszukiwanie Świętego Graala przy czym o tym mamy jakieś wzmianki historyczne. Prowadzi to wprost do tego, że pierwsza uwaga była słuszna (parafrazując - pisz odpowiednie komentarze i nie szukaj rozwiązania którego nie ma).

Jedyne do czego się przyznaję, biję w piersi i przepraszam to pierwotna wersja faktycznie mógła zostać odebrana jako atak - nie było to moim celem.

Graba i zgoda?
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Netbeans a interfejsy PHP

Piotr R.:
uwaga była słuszna (parafrazując - pisz odpowiednie komentarze i nie szukaj rozwiązania którego nie ma).

A pozatym jest też słabo typowane (czy typizowane zwał jak zwał) co jest wadą i zaletą w stosunku do języków silnie typowanych .......... ach te dodatkowe linijki do konwersji i zabawy z kolekcjami danych :) Ale nie wszczynam flame co jest lepsze ....
Graba i zgoda?
Jasne :) stawiam tylko pifko ciężko dosłać :D

Temat: Netbeans a interfejsy PHP

Jarosław C.:

Jasne :) stawiam tylko pifko ciężko dosłać :D

Jak mawiają Dziadowie, co ma wisieć nie utonie. Teraz sporo różnych konferencji w kraju robią to może na jakiejś się spotkamy i nie jedno wypijemy ;) Będę leciał gdzieś w twoje okolice to dam znać na priv. Jak byś wybierał się do stolicy też możesz dać znać to przylecę jak będę mógł.

Następna dyskusja:

PHP : Netbeans IDE + PHPUni...




Wyślij zaproszenie do