Это может быстро стать вопросом мнения, но, я чувствую, что свободный ввод вводит больше возможностей для ошибок. Могут быть некоторые случаи, когда это уместно, но, как правило, для кода, который должен быть надежным и поддерживаемым (возможно, выше «гибкого»), строгая типизация более безопасна.
PHP 5 имеет "типа намекая":
В РНР 5.0, вы можете использовать имена классов или интерфейсов в качестве типа намек, или self
:
<?php
function testFunction(User $user) {
// `$user` must be a User() object.
}
В РНР 5.1, вы можете также использовать array
как тип намек:
<?php
function getSortedArray(array $array) {
// $user must be an array
}
PHP 5.4 добавляет callable
для функций/закрытия.
<?php
function openWithCallback(callable $callback) {
// $callback must be an callable/function
}
В РНР 7.0, скалярные типы могут быть также использованы (int
, string
, bool
, float
):
<?php
function addToLedger(string $item, int $quantity, bool $confirmed, float $price) {
...
}
В РНР 7, теперь это называется Type Declaration.
PHP 7 также вводит Return Type Declarations, позволяя указать тип возвращаемого значения функции. Эта функция должна возвращать float
:
<?php
function sum($a, $b): float {
return $a + $b;
}
Если вы не используете PHP7, вы можете использовать подсказки типа, которые доступны, и заполнить оставшиеся пробелы с правильной PHPDoc documentation:
<?php
/**
* Generates a random string of the specified length, composed of upper-
* and lower-case letters and numbers.
*
* @param int $length Number of characters to return.
* @return string Random string of $length characters.
*/
public function generateRandomString($length)
{
// ...
return $randomString;
}
Многие редакторы могут анализировать эти комментарии и предупреждать вас о неправильном наборе текста (например, PHPStorm).
Мы можем добавить тип к функции foo (array $ bar) {// $ bar должен быть массивом} – vijaykumar
@vijaykumar, но это работает только с PHP 7, правильно? – Jurik
Проверка типов хороша для целого множества причин, и использование интерпретатора для этого (а не вручную), когда вы можете, всегда лучше. Но всегда будут случаи, когда код может быть более чистым со смешанными переменными, чем с сильной типизацией. – Kittsil