Jak w PHP zdeklarować własne funkcje

Jak w PHP zdeklarować własne funkcje
andrzej.kmicic
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 100
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.

mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
0

musiał byś napisać plugin do vsc.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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 :-)

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
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:

Kopiuj
<?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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.