PhpStorm не обнаруживает пространство имен библиотеки php

Я использую PhpStorm в качестве текущей IDE.

Единственная проблема, с которой я столкнулся, это то, что он не может найти мою php-библиотеку.

Я установил это: PHP-JS.

И под установкой я имею в виду сгенерированный файл php-js.so, который я загрузил через php5enmod php-js.

Библиотека работает:

// This is a valid namespace AND classname
$context = new JS\Context;
$result  = $context->evaluate("var x = 3; var y = 4; var z = x + y; ++z;");
// will output 8

По какой-то (ну, не такой уж и странной) причине PhpStorm не может найти пространство имен JS и, следовательно, классы из этого пространства имен.

Есть ли способ сообщить PhpStorm, что я на самом деле вызываю существующий метод из действительного класса из допустимого пространства имен?

Я пытался заставить его работать с помощью тегов docBlock, но ни один из них не соответствует тому, что мне нужно.


person Alex Tartan    schedule 10.03.2016    source источник
comment
PhpStorm НИКОГДА не прочитает ваш двоичный файл .so и не обнаружит там PHP-код/интерфейс. Вам нужно сделать то же самое, что и ВСЕ другие бинарные расширения php (например, Phalcon) -- создает заглушки (ограниченная версия PHP) ваших классов (классы/методы/функции/и т. д. с полным документом, но пустым телом). Вы можете Ctrl+Click использовать любой стандартный PHP-класс (например, MySQL) и сами посмотреть, как это делается.   -  person LazyOne    schedule 10.03.2016
comment
@LazyOne, я не ожидаю, что PhpStorm прочитает мой файл .so. Я спрашиваю, как сообщить ему, что я действительно использую действительное пространство имен. И не отмечать как недействительный   -  person Alex Tartan    schedule 10.03.2016
comment
@AlexTartan Как сказал LazyOne, PhpStorm знает пространства имен только тогда, когда для него есть заглушки или полные классы открытого текста, на которые ссылается композитор/include. См. репозиторий GitHub с заглушками методов JetBrains PhpStorm: github.com/JetBrains/phpstorm-stubs   -  person Daniel W.    schedule 10.03.2016
comment
@AlexTartan Просто сделайте, как я сказал в моем последнем предложении (или перейдите по ссылке, предоставленной DanFromGermany) - это то же самое. Как только вы увидите, как это делается там... вы можете сделать то же самое со своими заглушками для этой библиотеки PHP-JS. Затем просто разместите их в любом месте вашего проекта — они будут использоваться только IDE.   -  person LazyOne    schedule 10.03.2016
comment
@LazyOne, спасибо, что указали мне правильное направление. Я собираюсь сделать заглушки для каждого класса.   -  person Alex Tartan    schedule 10.03.2016
comment
@LazyOne, не могли бы вы сделать эти комментарии ответом, чтобы я мог должным образом поблагодарить вас за помощь?   -  person Alex Tartan    schedule 10.03.2016


Ответы (1)


Невозможно, чтобы PhpStorm прочитал ваш двоичный файл .so (.dll в Windows) и извлек оттуда интерфейсы PHP (и под «интерфейсом PHP» я подразумеваю классы/функции/константы/и т. д., которые расширение предлагает во время выполнения).

Поэтому вам нужно будет сделать то же самое, что и все другие бинарные расширения php (например, Phalcon's DevTools) — создавать файлы-заглушки.

Файл-заглушка — это ограниченная PHP-версия ваших классов/методов/функций/и т. д. с (необязательно) полным документом, но пустым телом. Вы можете Ctrl + Click на любом стандартном PHP-классе (например, MySQL) и сами увидеть, как это делается в PhpStorm (IDE откроет соответствующий файл-заглушку в другой вкладке редактора) ... или просто просмотреть их репозиторий-заглушку напрямую. (спасибо @DanFromGermany за ссылку -- https://github.com/JetBrains/phpstorm-stubs).

Примером такого файла-заглушки может быть (он охватывает код из вашего примера):

<?php

namespace JS;

class Context
{
    /**
     * Evaluate your JS code
     *
     * @param string $param JS code to evaluate
     * @return mixed
     */
    public function evaluate($param) {}
}

Просто поместите такие файлы-заглушки где-нибудь в свой проект (или укажите любым другим поддерживаемым способом, например, через PHP | Include paths) — этот код предназначен только для IDE.


Такие файлы-заглушки могут использоваться любой IDE/редактором, который может анализировать исходные файлы .php и предлагать оттуда классы/функции для завершения кода. Поэтому имеет смысл попросить разработчиков этого PHP-JS автоматически предоставлять такие заглушки ( как это делают разработчики Phalcon).

person LazyOne    schedule 10.03.2016