Tomasz Zadora

Tomasz Zadora programuję

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Witam,

czy jest sposób aby zmusić Netbeans to tworzenia podpowiedzi (CTRL+Space) w niektórych sytuacjach, takich jak np.:


public function &getSortableColumns()
{
$rt = array();
foreach ($this->columns as $name => &$column)
{
if (!$column->sortable || $column->notSQL || !$column->visible) continue;
$rt[$name] = $column;
}
return $rt;
}


I teraz chciałbym jakoś podpowiedzieć temu IDE, że w tablicy $this->columns są obiekty określonej klasy, tak że momencie kiedy wewnątrz foreach wpisując:

$column->

i naciskając CTRL+Spacja kiedy kursor jest na końcu linii, wyświetlą mi się metody i właściwości dla obiektu $colum.

Ewentualnie, może prościej - podpowiedź dla IDE, że zmienna $column to obiekt określonej klasy...Tomasz Zadora edytował(a) ten post dnia 18.06.12 o godzinie 16:12

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Strzelam, netbeansów nie używam od wielu lat, ale powinno pomóc.


/** @var \namespace\Class $column */
foreach ($this->columns as $name => &$column) {
...
}

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Pisałem o tym artykuł:
http://di.com.pl/porady/37332,0,PhpDoc_%E2%80%93_ulatw...

Jeżeli ów Netbeans nie jest upośledzony to powinno wyglądać to tak (zakładamy że columns jest chroniony)


class Costam {

/**
* @var NazwaKlasy[]
*/
protected $columns = array();

}


Zwracam szczególną uwagę na [] po nazwie klasy która informuje że mamy do czynienia z tablicą obiektów. Jak to nie pomaga to możesz zrobić jeszcze tak:


public function &getSortableColumns()
{
$rt = array();
/** @var Nazwa Klasy $column */
foreach ($this->columns as $name => &$column)
{
if (!$column->sortable || $column->notSQL || !$column->visible) continue;
$rt[$name] = $column;
}
return $rt;
}


Już bez [] z uwagi na to że zmienna $column zawiera instancję klasy. To chyba jasne.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

@Michał

Niestety... to działa tylko przy deklaracji zmiennej w klasie, czyli np.:


class Klasa
{
/**
* opis...
* @var \namespace\Class
*/
public $zmienna;
}


Nie mogę się tego w googlu doszukać... może po prostu się nie da :( W sumie Netbeans bardziej jest dla Javy niż PHP...

@Dariusz - niestety też nie działa....


/**
* Lista kolumn widoku, klucz = nazwa kolumny, wartość = obiekt klasy \inomod\admin\pagemodel\SQLTableViewColumn
* @var \inomod\admin\pagemodel\SQLTableViewColumn[]
*/
public $columns;


a mam dość nowe Netabeans (7.0.1)Tomasz Zadora edytował(a) ten post dnia 18.06.12 o godzinie 16:29
Jacek R.

Jacek R. programista

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Da się, ale obaj panowie wyżej są w niewielkim błędzie. Tak będzie działać:

/* @var $column NazwaKlasy */
foreach ($this->columns as $name => &$column)
...
Zauważ odwrotną kolejność nazwa-klasa oraz BRAK dodatkowej gwiazdki, z dwoma nie działa.

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Jacek R.:
Da się, ale obaj panowie wyżej są w niewielkim błędzie. Tak będzie działać:

/* @var $column NazwaKlasy */
foreach ($this->columns as $name => &$column)
...
Zauważ odwrotną kolejność nazwa-klasa oraz BRAK dodatkowej gwiazdki, z dwoma nie działa.
Problem w tym, że obaj panowie napisali phpDoc'a tak jak powinien być zapisany, a netbeans sobie :)
Jacek R.

Jacek R. programista

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Michał Wachowski:
Problem w tym, że obaj panowie napisali phpDoc'a tak jak powinien być zapisany, a netbeans sobie :)
Problem w tym, że pytanie nie było o phpDoca i nawet nie jest to phpDoc (jedna gwiazdka, nie dwie). Właśnie tak wygląda w NetBeansie wymuszony type hinitng.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Zadziałało (to był problem dwóch gwiazdek):


/* @var $column \inomod\admin\pagemodel\SQLTableViewColumn */
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Niestety pod tym względem NetBeans mnie coraz to bardziej drażni. Niedziałające podpowiadanie składni,
albo też niedziałające aliasy. Przykład:

- mam np zdefiniowany alias "zd" pod którym jest Zend_Debug::dump();
- odwołujemy się do aliasów poprzez alias+TAB
- w efekcie otrzymujemy "zd zd zd zd zd zd zd zd zd Zend_Debug::dump()" - czyli za "n"-tą próbą załapie ;)

/* @var $column \inomod\admin\pagemodel\SQLTableViewColumn */

Dla powyższego także jest alias "vdoc" i także zanim zadziała to szybciej napiszę to ręcznie.Artur Świerc edytował(a) ten post dnia 18.06.12 o godzinie 18:06

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Jacek R.:
Da się, ale obaj panowie wyżej są w niewielkim błędzie. Tak będzie działać:

/* @var $column NazwaKlasy */
foreach ($this->columns as $name => &$column)
...
Zauważ odwrotną kolejność nazwa-klasa oraz BRAK dodatkowej gwiazdki, z dwoma nie działa.

Netbeans używa javaDoc do PHP ? :| No to mój błąd. Przyzwyczaiłem się że moje IDE interpretuje poprawnie phpDoc i przy okazji rozumie zarówno zapis
/** @var $column NazwaKlasy */

oraz
/** @var NazwaKlasy $column */

Fakt, pytanie nie dotyczyło phpDoc tylko Netbeans jako takiego. Po prostu nie spodziewałem się że Netbeans pod tym względem nadal jest upośledzony.Dariusz Półtorak edytował(a) ten post dnia 19.06.12 o godzinie 10:55
Jacek R.

Jacek R. programista

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Dariusz Półtorak:
Netbeans używa javaDoc do PHP ? :| No to mój błąd.
To nie jest JavaDoc (tamten też używa dwóch gwiazdek).
Dariusz Półtorak:
Fakt, pytanie nie dotyczyło phpDoc tylko Netbeans jako takiego. Po prostu nie spodziewałem się że Netbeans pod tym względem nadal jest upośledzony.
Ale to nie jest PHPDoc! Gdzie PHPDoc definiuje, jak należy dokumentować pętle? Nigdzie, bo to w ogóle wybiega poza cele dokumentowania kodu. Nie dokumentuje się pętli czy wyrażeń warunkowych, generalnie żadnych struktur językowych. Takie coś to wymysł ludzi, którzy chcą jakoś mieć rozwiązany type hinting w dynamicznie typowanym języku. I widocznie różne środowiska różnie to wspierają. Nie ma tutaj upośledzonego edytora, bo nie ma standardu.

Może warto przesiąść się po prostu na język typowany statycznie? :P Bo to dopisywanie tych komentów wszędzie, tylko po to by mieć podpowiedzi czy czytelność kodu, to jakaś masakra. 50% więcej pisania.

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Jacek R.:
Dariusz Półtorak:
Fakt, pytanie nie dotyczyło phpDoc tylko Netbeans jako takiego. Po prostu nie spodziewałem się że Netbeans pod tym względem nadal jest upośledzony.
Ale to nie jest PHPDoc! Gdzie PHPDoc definiuje, jak należy dokumentować pętle?

Chyba się zgrywasz...
Gdzie tu masz dokumentację pętli?

/** @var nazwa $zmienna */

przypisanie typu do $zmienna

/** @var nazwa[] $zmienna */

przypisanie typu do elementów tablicy do $zmiennaMichał Wachowski edytował(a) ten post dnia 19.06.12 o godzinie 11:44
Jacek R.

Jacek R. programista

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Michał Wachowski:
Chyba się zgrywasz...
Gdzie tu masz dokumentację pętli?

/** @var nazwa $zmienna */

przypisanie typu do $zmienna

/** @var nazwa[] $zmienna */

przypisanie typu do elementów tablicy do $zmienna
Nie dokumentuje się kodu wewnątrz funkcji, jak to napisałeś wyżej. Dokumentuje się interfejs, użycie PHPDoc w środku ciała funkcji jest błędem (chyba tylko tagi @todo są zezwolone). Nawet jeśli używasz globala wewnątrz, deklarujesz go na zewnątrz.

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Jacek R.:
Dariusz Półtorak:
Netbeans używa javaDoc do PHP ? :| No to mój błąd.
To nie jest JavaDoc (tamten też używa dwóch gwiazdek).
Dariusz Półtorak:
Fakt, pytanie nie dotyczyło phpDoc tylko Netbeans jako takiego. Po prostu nie spodziewałem się że Netbeans pod tym względem nadal jest upośledzony.
Ale to nie jest PHPDoc! Gdzie PHPDoc definiuje, jak należy dokumentować pętle? Nigdzie, bo to w ogóle wybiega poza cele dokumentowania kodu. Nie dokumentuje się pętli czy wyrażeń warunkowych, generalnie żadnych struktur językowych. Takie coś to wymysł ludzi, którzy chcą jakoś mieć rozwiązany type hinting w dynamicznie typowanym języku. I widocznie różne środowiska różnie to wspierają. Nie ma tutaj upośledzonego edytora, bo nie ma standardu.

@Jacku, zrozumiałem że @Tomaszowi nie zadziałało /** przy atrybucie a nie wewnątrz pętli :P W tym momencie jak NetBeans nie potrafi sobie z tym poradzić to coś jest nie tak i jeżeli tak jest to nadal twierdzę że jest owo IDE jest upośledzone skoro wymusza /*.

Ów zapis wewnątrz pętli itp służy temu by pomóc IDE w rozwikłaniu typu zmiennej jeżeli ma problemy. A na ogół owych problemów nie ma. Co zakończę tym że:

Może warto przesiąść się po prostu na język typowany statycznie? :P Bo to dopisywanie tych komentów wszędzie, tylko po to by mieć podpowiedzi czy czytelność kodu, to jakaś masakra. 50% więcej pisania.

wcale nie oznacza 50% więcej pisania. Raz na ruski rok dopisujesz taki drobiazg żeby w trakcie pisania działał Ci type hinting. Chyba JEDYNY moment kiedy taki zapis wewnątrz kodu mi się przydał był wtedy gdy tworzyłem mały ORM i był problem kiedy mapper zwracał obiekty danych. Type hinting nie działał z uwagi na to że metoda która konwertowała dane z bd na obiekty operowała na typie "DataObject" gdzie poszczególne obiekty danych dziedziczące po DataObject miały swoje własne atrybuty których już IDE nie podpowiadało.
Problemu by nie było gdybym wrzucał ową metodę do poszczególnych mapperów ale to by było deczko głupie. Ona należała do rodzica mapperów. Więc pozostało posiłkować się owym trikiem.

Pierwsze słyszę żeby jakieś poważne IDE do PHP sobie z tym nie radziło. Chyba phpStorm mnie za bardzo zmiękczył :P

PS:
Może warto przesiąść się po prostu na język typowany statycznie? :P Bo to dopisywanie tych komentów wszędzie, tylko

To tak jak by po jednej nieudanej randce stwierdzić że zostajesz gejem :PDariusz Półtorak edytował(a) ten post dnia 19.06.12 o godzinie 12:21
Jacek R.

Jacek R. programista

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Dobrze, zgadzam się, że Netbeans źle hintuje sam w sobie w przypadku PHP (i narzekałem na to już gdzie indziej), ale nie możemy ani wymagać by poprawnie PHPDoca rozpoznawał *wewnątrz ciała funkcji*, jak i w ogóle nie możemy tego nazywać PHPdociem :)

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Jacek R.:
Dobrze, zgadzam się, że Netbeans źle hintuje sam w sobie w przypadku PHP (i narzekałem na to już gdzie indziej), ale nie możemy ani wymagać by poprawnie PHPDoca rozpoznawał *wewnątrz ciała funkcji*, jak i w ogóle nie możemy tego nazywać PHPdociem :)

Z tym się w 100% zgadzam :P

I dla świętego spokoju radzę szukać IDE które jednak to potrafi odwalić taki trik z komentarzem wewnątrz kodu jeżeli paramy się PHP. Dla samego kodu nic to nie zrobi ale dla programisty owszem. Nieoceniony trik tam gdzie IDE nie może rozwikłać typu.
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Od paru dni testuję phpstorm'a. Zaskakuje mnie swoją szybkością w podpowiadaniu składni i tworzeniu doców w stylu /** @var nazwa $zmienna */. W przypadku kiedy używasz DI i odwołujesz się do kontenera, IDE nie ma pojęcia na jakim obiekcie pracujesz, trzeba sobie (i innym) jakoś pomagać.

Tutaj niestety Jacek Romanowski ma rację, tworzymy w ten sposób nowe protezy do tego języka. Jeśli sam PHP nie daje nam takiej możliwości, to trzeba tworzyć bajpasy.

Przypomina mi się temat adnotacji w RFC na php.net, zrezygnowali z normalnej formy w stylu C#, na rzecz adnotacji phpdoc. Co prawda temat jest "Under Discussion" (pewnie jeszcze następny rok), ale świadczy to o tym, że został nam już tylko ten phpdoc.

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Artur Świerc:
Tutaj niestety Jacek Romanowski ma rację, tworzymy w ten sposób nowe protezy do tego języka. Jeśli sam PHP nie daje nam takiej możliwości, to trzeba tworzyć bajpasy.

Śmiem twierdzić że przesadzacie. Żadnych protez nie potrzeba:


<?php

class Foo {

public function test() {
return true;
}

}

class Bar {

/**
* @var Foo[]
*/
protected $foos = array();

public function dziala() {
foreach($this->foos as $Foo) {
$Foo->//TODO: sprawdz tutaj
}
}
}


Kod jest prawidłowy ? TAK
phpDoc jest prawidłowy ? TAK
Czy tak czy siak dokumentujemy kod ? TAK
Czy mamy prawidłowe podpowiadanie w każdym porządnym IDE ? POWINNO BYĆ


Obrazek


Jedyne momenty kiedy muszę skorzystać (dla własnej wygody) z tej sztuczki w środku kodu to wtedy kiedy mam sytuację gdy dana metoda/funkcja itp przyjmuje różne obiekty o tym samym typie bazowym albo interfejsie.
I w tym momencie jeżeli ów obiekt ma swoje własne unikalne metody, podpowiadanie działa dla rodzica/interfejsu bo IDE nie jest w stanie rozpoznać obiektu tworzonego dynamicznie.

Więc w tym momencie posiłkuję się takim właśnie zapisem. I to jest tylko promil przypadków gdzie rzeczywiście w jakimś warunku czy coś ową dodatkową unikalną metodę używam. W reszcie przypadków jasnym jest że wystarczy mi podpowiadanie po interfejsie albo obiekcie bazowym.

Więc nie widzę problemu. Jeżeli ktoś ma problem z podpowiadaniem w trywialnych sytuacjach jak powyższa to po prostu trzeba:

1: zacząć dokumentować kod jak należy (bez sztuczek)
2: zapatrzyć się w porządne IDE

Jak ktoś pracuje to wydanie 160-360zł na phpStorm albo coś w tym zakresie na inne IDE to raczej nie jest wydatek. Więc gdzie leży problem ?
Piotr Jarolewski

Piotr Jarolewski Software Engineer at
Grupa Allegro

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Dariusz Półtorak:
Artur Świerc:
Tutaj niestety Jacek Romanowski ma rację, tworzymy w ten sposób nowe protezy do tego języka. Jeśli sam PHP nie daje nam takiej możliwości, to trzeba tworzyć bajpasy.

Śmiem twierdzić że przesadzacie. Żadnych protez nie potrzeba:


<?php[/quote]> [quote]class Foo {

public function test() {
return true;
}

}

class Bar {

/**
* @var Foo[]
*/
protected $foos = array();

public function dziala() {
foreach($this->foos as $Foo) {
$Foo->//TODO: sprawdz tutaj
}
}
}


Kod jest prawidłowy ? TAK
phpDoc jest prawidłowy ? TAK
Czy tak czy siak dokumentujemy kod ? TAK
Czy mamy prawidłowe podpowiadanie w każdym porządnym IDE ? POWINNO BYĆ


Obrazek


Jedyne momenty kiedy muszę skorzystać (dla własnej wygody) z tej sztuczki w środku kodu to wtedy kiedy mam sytuację gdy dana metoda/funkcja itp przyjmuje różne obiekty o tym samym typie bazowym albo interfejsie.
I w tym momencie jeżeli ów obiekt ma swoje własne unikalne metody, podpowiadanie działa dla rodzica/interfejsu bo IDE nie jest w stanie rozpoznać obiektu tworzonego dynamicznie.

Więc w tym momencie posiłkuję się takim właśnie zapisem. I to jest tylko promil przypadków gdzie rzeczywiście w jakimś warunku czy coś ową dodatkową unikalną metodę używam. W reszcie przypadków jasnym jest że wystarczy mi podpowiadanie po interfejsie albo obiekcie bazowym.

Więc nie widzę problemu. Jeżeli ktoś ma problem z podpowiadaniem w trywialnych sytuacjach jak powyższa to po prostu trzeba:

1: zacząć dokumentować kod jak należy (bez sztuczek)
2: zapatrzyć się w porządne IDE

Jak ktoś pracuje to wydanie 160-360zł na phpStorm albo coś w tym zakresie na inne IDE to raczej nie jest wydatek. Więc gdzie leży problem ?

Dariusz napisz mi proszę jak kupie PHPStorma na Mac OS X, a będę chciał go później postawić na Windowsie czy linuksie na tym samym kluczu licencji, chyba nie będzie problemem?

konto usunięte

Temat: Netbeans - podpowiedzi PHP w niektórych sytuacjach

Piotr Jarolewski:
Dariusz napisz mi proszę jak kupie PHPStorma na Mac OS X, a będę chciał go później postawić na Windowsie czy linuksie na tym samym kluczu licencji, chyba nie będzie problemem?

Dostajesz klucz przypisane do Twojego nazwiska. Tyle. Klucz daje Ci uprawnienia do korzystania z wszystkich wersji phpStorm od daty zakupu do 1 roku po zakupie.

W skrócie jeżeli kupiłeś phpStorm 3 a wersja 4 wyszła szybciej jak rok po Twoim zakupie to automatycznie dostajesz licencję na phpStorm 4. Jeżeli chcesz mieć dostęp do kolejnych wydań phpStorm to po prostu płacisz im rocznie około 50 euro. Pierwszy zakup to 100 euro. Aktualizacje wychodzą regularnie i często a zmiany są znaczące więc warto.

Klucz i licencja po prostu uprawnia Cie do korzystania z phpStorm na warunkach licencji. Możesz sobie pobrać dowolną wersję (Linux, Windows, Mac) i zmieniać je jak Ci się podoba. Warunek - tylko jeden program na Twojej licencji może działać w danym momencie.

Pytałem nawet czy mogę korzystać z phpStorm w pracy mając personalną licencje. Okazuje się że można. Licencja personalna jest przypisana do Ciebie, więc nikt oprócz Ciebie nie powinien korzystać z Twojego phpStorm. Ot warunek. Firmowa różni się tym że korzystać może z niej dana firma, niezależnie jaki pracownik.

To nie jest duży wydatek w zamian za święty spokój. Dariusz Półtorak edytował(a) ten post dnia 20.06.12 o godzinie 09:01

Następna dyskusja:

PHP : Netbeans IDE + PHPUni...




Wyślij zaproszenie do