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, но ни один из них не соответствует тому, что мне нужно.

1

Решение

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

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

Заглушка — это ограниченная версия PHP ваших классов / методов / функций / и т.д. с (необязательно) полным документом, но пустыми телами. Вы можете Ctrl + клик в любом стандартном классе 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).

3

Другие решения

Других решений пока нет …