В 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 7;)

https://wiki.php.net/rfc/return_types


изгоняют как

 return (bool) $value;

не в данный момент в 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, поскольку он слабо типизирован. Вам нужно будет выполнить проверку в вызывающей функции.