Как правильно набрать подсказку SimpleXMLElement?

1

Есть ли способ правильно набрать элемент \SimpleXMLElement? Так что мне не нужно вводить все то, к чему он обращается, и aa\SimpleXMLElement?

Если я хочу, чтобы у меня был весь тип, я должен сделать это следующим образом:

   /**
     * @var \SimpleXMLElement $values (this is not! an array, yet it is traversable)
     */
    $values = $response->params->param->value->array->data->value;
    foreach ($values as $row) {
        $row = $row->array->data->value;

        /**
         * @var \SimpleXMLElement $row
         */

        $entry = $row[0];

        /**
         * @var \SimpleXMLElement $entry
         */
        $xmlString = $entry->asXML();
}

Это кажется весьма многословным и излишним. Есть ли способ набрать элемент SimpleXMLElement, чтобы все то, что оно вернуло, также было введено с помощью coreclty typehinted?

Теги:
phpstorm
type-hinting
simplexml

1 ответ

3

Если вы нажмете Ctrl-клик на "определение" SimpleXMLElement в PHPStorm, вы увидите, что у него есть определение класса заглушки, которое оно использует для автоматического завершения и анализа кода.

Перегруженный -> оператор представлен в этом заглушке следующим образом (взято из PHPStorm 9.0):

/**
 * Provides access to element children
 * @param $name child name
 * @return SimpleXMLElement[]
 */
function __get($name) {}

Обратите внимание, что здесь тип возврата - SimpleXMLElement[], т. SimpleXMLElement " SimpleXMLElement объектов SimpleXMLElement ". Это позволяет правильно автозаполнять, если вы пишете что-то вроде $node->childName[0]->grandChild[0]->asXML(), но не используете короткую форму $node->childName->grandChild->asXML()

Это может быть классифицировано как ошибка в среде IDE и хранится в общедоступном трекере как WI-15760. Вместо этого заглушка должна объявлять возвращаемый тип __get() как SimpleXMLElement а также объявлять implements ArrayAccess с помощью offsetGet() также возвращая SimpleXMLElement. Тестирование с помощью моего собственного фиктивного класса предполагает, что это будет правильно автозаполнено как для явных [0] и для коротких случаев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню