Jak w PHP zdeklarować własne funkcje

0

Witam,
Problem jest w tym, że wprowadziłem do PHP kilka własnych bibliotek napisanych w rozszerzeniach php_xxx.dll które umieszczone są jako standardowe biblioteki "extenssion".
Praktycznie w VSCode natychmiast wyłapywane są one jako nieznane funkcje. Ładnie by było, aby jakoś je wprowadzić na listę tych znanych. Ideałem byłoby również to aby pojawiały sie w podpowiedziach IntelliSense.
Ma ktoś jakiś pomysł. Nie wiem czy rozszerzenia IntelliSense korzystają z jakiś list czy baz danych i gdzie one się znajdują by może spróbować pogrzebać, Brakuje jasnych metod wprowadzania własnych podpowiedzi tak jak np można wprowadzać własne fragmenty kodu (snippets).
pozdrawiam
AK.

0

musiał byś napisać plugin do vsc.

3

PhpStorm rozwiązuje ten problem poprzez obsługę specjalnego pliku o nazwie .phpstorm.meta.php - https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html - który zdaje się być również wspierany przez vscode-intelephense :-)

3

Rozwiązanie @Patryk27 jest dobre jeśli chodzi o PhpStorm, napisanie pluginu do VS też jest w miarę, ale są to rozwiązania pasujące do jednego IDE.

Jeśli chciałbyś rozwiązanie które pasuje do każdego, IDE, to mógłbyś zrobić coś takiego:

<?php
if (!function_exists('my_function')) {
  function my_function(string $arg, int $arg): int {
    throw new Exception("My module wasn't loaded properly");
  }
}

Ma to 4 zalety:

  • Po pierwsze, taką deklarację funkcji zobaczy każde IDE
  • Po drugie, jeśli użyjesz tej funkcji, a moduł nie zostanie poprawnie załądowany, dostaniesz elegancki exception
  • Po trzecie, możesz zadeklarować syngaturę funkcji 1:1 (argumenty, typy, return type, domyślne argumenty, opcjonalne argumenty, nawet ...varargs)
  • Po czwarte, ponieważ takie coś jest napisane w PHP, jeśli kiedykolwiek zmienisz swoje funkcje w module, to wystarczy że zmienisz taki pliczek.

Ma też jedną wadę:

  • Trzeba dołączyć ten kod jakoś razem z modułem (ale to też się da obejść, może przez composer? Wtedy Twój dodatek stałby się paczką, i użytkownik nawet nie wiedziałby że korzysta z .dll)

PS: Swoją drogą, czemu tak czy tak Twój moduł to nie jest paczka composerowa?
PS2: Chcesz je jakoś dołączać do aplikacji po stronie servera? Bo jeśli tak to moje rozwiązanie odpada.

1 użytkowników online, w tym zalogowanych: 0, gości: 1