Подтвердить что ты не робот

Зачем объявлять тип переменной PHP в комментарии?

Я новичок в PHP, и я только начал использовать NetBeans для разработки моего PHP-кода.

Синим цветом, когда я ввел переменную в запрос, появилось диалоговое окно и попросило заполнить комментарий для хранения типа переменной. Я провел некоторое расследование и обнаружил, что это, по-видимому, популярная функция NetBeans, но я не мог найти никакой информации, чтобы объяснить мне, почему это было так.

Почему кто-то хочет поместить тип переменной PHP в комментарий? Используется ли это для разработки или действительно ли это полезно для самого кода? Является ли он интегральным или необязательным?

4b9b3361

Ответ 1

Добавление типа в тег @var внутри комментария метода позволит NetBeans показать вам завершение кода. Это, конечно, необязательно, но всегда полезно полностью документировать свой код.

Изменить: Совет для NetBeans для автоматического создания комментариев для вас - использовать расширение /**. Для этого просто поместите курсор над свойством или методом, который вы хотите документировать, и введите /**, а затем нажмите клавишу ENTER. Это расширит комментарий к стилю phpDoc и добавит соответствующие теги.

Изменить 2: Тег @var можно использовать для свойства, и вы можете использовать тег @param для метода, чтобы добиться такого же эффекта с параметрами, переданными в метод.

Использование тега @var для свойства даст подсказки кода при использовании свойства в любом месте, где оно видно:

/**
 *
 * @var My_Type
 */
private $_myProperty;

Использование тега @param метода даст вам подсказки кода при использовании параметра внутри метода:

/**
 *
 * @param My_Type $obj 
 */
public function myMethod($obj) {

}

Другим способом достижения аналогичного эффекта, а также обеспечения степени безопасности типов является использование PHP type hinting механизм:

public function myMethod(My_Type $obj) {

}

Обратите внимание, что этот метод имеет тип, указанный в сигнатуре метода. Теперь NetBeans предоставит такое же завершение кода внутри метода, который доступен с помощью тега @param, а PHP будет генерировать E_RECOVERABLE_ERROR, если тип, переданный в этот метод, не является тем же типом, который был указан. См. документацию PHP относительно ошибок и способы их обработки, если вам интересно узнать больше об этой ошибке.

Ответ 2

Я думаю, вы говорите о чем-то подобном:

/**
 * @var SimpleXMLElement $xml
 */
private $xml;

Это так называемый комментарий phpDoc. Он позволяет создавать документацию API (как это, например,). Кроме того, большинство IDE, включая Eclipse и NetBeans, также поддерживают этот синтаксис и обеспечивают динамическое завершение кода и т.д.

Ответ 3

Если вы хотите объявить тип переменной в случае, когда переменная не является свойством класса, а просто переменной, которая содержит некоторое возвращаемое значение, используйте одиночные комментарии, а затем @var, а затем имя переменной и, наконец, следует тип этой переменной. Например:

/* @var $errorMessage NotificationMessage */
$errorMessage= $allMessages->rewind()->current();

сообщит NetBeans или PhpStorm, что $errorMessage является экземпляром NotificationMessage, и вы должны получить завершение кода для этой переменной.

Ответ 4

Несмотря на то, что netbeans используют его для автозаполнения, это часто полезно для документирования вашего кода:

В этом случае вы знаете, что получает этот метод и что он возвращает, но внутри кода, о котором вы не знаете, что происходит

/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    $factoredObj = getObject($someObj); //you are not sure what type it returns
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

Вы можете прокомментировать это с помощью /* @var $variable type */ внутри кода

/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    /* @var $factoredObj someType */
    $factoredObj = getObject($someObj);
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

или

$factoredObj = getObject($someObj); /* @var $factoredObj someType */

Ответ 5

Поскольку PHP - это язык с отложенным/утиным языком, когда вы создаете большую программу, подсказки типа могут помочь вам или другим понять, что происходит, если возникнет проблема. Например, ожидая смешанный тип и отправляя целое число.