Тип возврата PHP - PullRequest
       48

Тип возврата PHP

9 голосов
/ 24 февраля 2011

Можно ли определить тип возвращаемого значения следующим образом?

public static function bool Test($value)
{
      return $value; //this value will be bool
}

Ответы [ 10 ]

30 голосов
/ 16 августа 2016

Поскольку этот вопрос все еще встречается в топ-результатах 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 доступен как на вашем сервере разработки, так и на рабочем сервере.

16 голосов
/ 24 февраля 2011

Невозможно явно определить тип возвращаемого значения на уровне метода / функции.Как указано, вы можете приводить к возвращаемому результату, например, ...

return (bool)$value;

В качестве альтернативы, вы можете добавить комментарий в синтаксисе phpDoc, и многие IDE будут выбирать тип с точки зрения завершения типа.

/**
 * example of basic @return usage
 * @return myObject
 */
function fred()
{
    return new myObject();
}
5 голосов
/ 24 февраля 2011

Согласно этой странице: http://php.net/manual/en/language.types.type-juggling.php

Вы можете попробовать сделать,

return (boolean) $value;

Теперь PHP предлагает объявление типа возврата из PHP 7. Я объяснил как использовать тип возврата в PHP

3 голосов
/ 04 февраля 2015

Тип возврата добавлен в PHP 7;)

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

2 голосов
/ 24 февраля 2011

сотворите как

 return (bool) $value;
1 голос
/ 29 марта 2017

С момента выхода 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 объясняет это следующим образом:

В сильном режиме возвращаемое значение должно быть правильного типа, в противном случае выдается ошибка TypeError.

declare(strict_types=1);
function myInt() : int {
    return "1";
}

echo gettype(myInt());
// Throws an TypeError
1 голос
/ 29 декабря 2011

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

public function Test($value)
{
      return (bool) OnTest();
}

private function OnTest($value)
{
      return $value;
}

Делая это, вы можете позволить классам, которые наследуются от вашего класса, изменять функциональность в OnTest, но при этом гарантировать, что Test возвращает значение bool.

1 голос
/ 24 февраля 2011

В настоящий момент в PHP 5 или ниже вы не можете определить тип в знаке функции, но не в возвращаемом значении. Строгие декларации на PHP вер. 6 и выше, но еще не реализованы.

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

0 голосов
/ 24 февраля 2011

Если вы знаете, что тип возвращаемого значения будет bool, то нет смысла приводить его к функции внутри.

Нет способа определить тип возвращаемого значения функции в PHP, так как оно свободно-typed.Вам нужно будет выполнить проверку в вызывающей функции.

0 голосов
/ 24 февраля 2011

PHP не позволяет вам сделать это, вместо этого вы можете сделать это:

public static function Test($value)
{
      return (bool) $value; //this value will be bool
}

Насколько мне известно, вы не можете использовать интерфейс для принудительного возврата

...