В PHP тип возврата
можно ли определить возвращаемый тип следующим образом?
public static function bool Test($value)
{
return $value; //this value will be bool
}
10 ответов
согласно этой странице : http://php.net/manual/en/language.types.type-juggling.php
вы можете попытаться сделать,
return (boolean) $value;
теперь PHP предлагает объявление типа возврата из PHP 7. Я объяснил!--8-->как использовать тип возврата в PHP
поскольку этот вопрос по-прежнему появляется в лучших результатах Google, вот актуальный ответ:
PHP 7 фактически введен правильные типы возврата для функций / методов по состоянию на это RFC.
вот пример из руководства, указанному выше:
function sum($a, $b): float {
return $a + $b;
}
или, в более общем нотации:
function function_name(): return_type {
// some code
return $var // Has to be of type `return_type`
}
Если возвращаемая переменная или значение не соответствует возвращаемому типу, PHP будет неявно преобразуйте его в этот тип. Кроме того, вы можете включить строгая типизация для файла через declare(strict_types=1);
, в этом случае несоответствие типа приведет к Исключение TypeError.
как-то легко. Однако помните, что вам нужно убедиться, что PHP 7 доступен как на вашем сервере разработки, так и на производственном сервере.
невозможно явно определить тип возврата на уровне метода/функции. Как указано, Вы можете привести в return, например ...
return (bool)$value;
кроме того, вы можете добавить комментарий в синтаксисе phpDoc, и многие IDE будут выбирать тип с точки зрения завершения типа.
/**
* example of basic @return usage
* @return myObject
*/
function fred()
{
return new myObject();
}
не в данный момент в PHP 5 или ниже вы можете определить тип в знаке функции, но не в возвращаемом значении. Строгие декларации имеют в виду на PHP ver. 6 и выше, но пока не реализованы.
возможно, с некоторыми трюками вы можете сделать это, например, кастинг перед возвратом значения...
еще одна вещь, которую вы можете сделать, чтобы убедиться, что переопределения не изменяют тип возврата, - это сделать что-то вроде этого:
public function Test($value)
{
return (bool) OnTest();
}
private function OnTest($value)
{
return $value;
}
делая это, вы можете разрешить классам, которые наследуют от вашего класса, изменять функциональность в OnTest, но все же убедитесь, что Test возвращает значение bool.
С момента выпуска PHP7 они теперь представили Возвратите Объявления Типа на PHP.
вы определяете тип возврата, добавляя : type
когда вы определяете функцию:
public function foo() : array
{
return array();
}
Слабый Режим По Умолчанию
по умолчанию PHP использует слабый режим. В документации это объясняется следующим образом:
в слабом режиме по умолчанию возвращаемые значения будут принуждаться к правильному типу, если они еще не этот тип
например, см. Следующий пример, где функция возвращает string
, даже если определенный тип возврата int
function myInt() : int {
return "1";
}
echo gettype(myInt());
// Output is "integer"
Сильный / Строгий Режим
вы также можете сказать PHP, чтобы войти в строгий / сильный режим при обработке возвращаемых типов, установив declare(strict_types=1)
. Это означает, что PHP будет бросать TypeError
если функция возвращает неправильный тип. Документация PHP объясняет это следующим образом:
в режиме strong возвращаемое значение должно иметь правильный тип, иначе будет выдан TypeError.
declare(strict_types=1);
function myInt() : int {
return "1";
}
echo gettype(myInt());
// Throws an TypeError
PHP не позволяет вам это делать, вместо этого вы можете сделать это:
public static function Test($value)
{
return (bool) $value; //this value will be bool
}
насколько мне известно, вы не можете использовать интерфейс для принудительного возврата типа
Если вы знаете, что тип возвращаемого значения будет bool, то нет смысла бросать его в функцию.
нет способа определить возвращаемый тип функции в PHP, поскольку он слабо типизирован. Вам нужно будет выполнить проверку в вызывающей функции.