Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JetBrains PHP Storm a Intelisense w przypadku Singleton(Registry)
Forum PHP.pl > Forum > PHP
b3rt
Witam,

Podpowiedzi "intelisense" sprawują się ok w przypadku gdy utworzę obiekt i odwołuję się do niego bezpośrednio, mianowicie:
  1. $a = new Klasa();
  2. $a->metoda(); (w tym miejscu po napisaniu -> wyskakuje podpowiedź (lista metod, zmiennych, etc.))


Jednak w przypadku gdy utworzę np.
  1. Registry::set('Klasa', new Klasa());
  2. $a = Registry::get('Klasa');


i w chwili pisania
  1. $a-> (brak podpowiedzi)


Czy jest na to jakieś rozwiązanie ? Ustawienia czy coś w tym stylu ?
Pisanie małego serwisu, gdzie podglądanie pliku klasy o małej ilości metod ... nie stanowi problemu, to w przypadku pisania większego serwisu, bardziej złożonego, jest już dość problematyczne.
Czy ew. ktoś może podpowiedzieć jakie środowisko obsługuje takie coś ?
irmidjusz
to bardzo proste, użyj specjalnego komentarza informującego IDE, jakiej klasy jest dana zmienna:
  1. /* @var $a Klasa */
  2. $a-> //... i tu będzie podpowiedź

StreetFighter
witam, a jak dla obiektu utworzonego w obiekcie? bo poniższe nie działa:
  1. /* @var $a->foo Klasa */
  2. $a->foo->boo();




edit: testuje juz któryś ide z kolei i tylko phpdesigner8 ma z automatu podpowiedzi nawet jak klasa jest wywoływana w dziwny sposób
viking
Zacznij stosować prawidłowe komentarze w kodzie https://github.com/phpDocumentor/fig-standa...posed/phpdoc.md
StreetFighter
  1. * @property Klasa $foo - opis



ale co jeżeli jest inicjowany obiekt przez:
  1. $a->foo = new Klasa();


na to nie mogę znaleźć rozwiązania

oczywiście klasa której uchwytem jest obiekt $a nie wie jaka będzie zainicjowana klasa na stringu foo, więc musiałoby to być ustawione w Klasia();

Pyton_000
Co do statików to możesz zrobić sobie pliczek .phpstorm.meta.php o zawartości:

  1. <?php
  2. namespace PHPSTORM_META {
  3.  
  4. override(Registry::get(0), map([
  5. '' => '@',
  6. 'Klasa' => \Klasa::class
  7. ]));
  8. }


Wtedy storm po zaindeksowaniu tego pliku będzie Ci podpowiadał jakie klasy masz dostępne w Registry::get().
Oczywiście musiałbyś umieścić tu wszystkie deklaracje co na co ma być mapowane.
StreetFighter
dziękuje Pyton_000, swoją drogą jest to bzdura że trzeba informować ide,
jeżeli użyje
  1. $a->foo = new Klasa

choć w bieżącym pliku podpowiada bez problemu ale jeżeli plik jest includ'owany już nie.


A czy da radę Pytona sposobem dopisać
  1. StatCls::foo()->metObj(); //żeby foo było mapowane? Tj foo zwraca self::$foo które odnosi się do jakiejś klasy
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.