UNPKG

manual-php

Version:
210 lines (162 loc) 3.8 kB
# 返回值 与参数类型声明类似 ,返回类型声明指定将从函数返回的值的类型。 返回类型声明可以使用相同的类型。 | 类型 | 描述 | | ----------- | ------------------------------------ | | 类/接口名称 | 返回值必须是给定的类或实现接口的实例 | | self | 返回值必须是与定义方法的类相同的实例 | | array | 返回值必须是数组 | | callable | 返回值必须是可调用类型 | | bool | 返回值必须是布尔类型 | | float | 返回值必须是浮点型 | | int | 返回值必须是整型 | | string | 返回值必须是字符串 | 值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。如果省略了 `return` ,则返回值为 `NULL` 。 ```php <?php /** * Calculate the cube of an integer. * * @param int $number * @return int */ function foo(int $number): int { return $number ** 3; } foo(2); ``` 返回一个数组以得到多个返回值。 ```php <?php /** * Return an array. * * @param void * @return array */ function foo(): array { return [2, 4, 5]; } list($foo, $bar, $baz) = foo(); ``` 从函数返回一个引用。 ```php <?php class Foo { /** * Just a test property. * * @var int */ public int $property = 5; /** * Return a reference. * * @param void * @return int */ public function &method(): int { return $this->property; } } $foo = new Foo(); $property = &$foo->method(); var_dump($property); // int(5) $foo->property = 6; var_dump($property); // int(6) ``` 基本类返回类型声明。 ```php <?php /** * Basic class return type declaration. * * @param string $class * @return Foo */ function foo(string $class): Foo { return new $class; } class Foo { // } class Bar extends Foo { // } class Baz { // } var_dump(foo('Foo')); // object(Foo)#1 (0) { } var_dump(foo('Bar')); // object(Bar)#1 (0) { } var_dump(foo('Baz')); // PHP Fatal error: Uncaught TypeError: Return value of foo() must be an instance of Foo, instance of Baz returned. ``` 基本接口返回类型声明。 ```php <?php /** * Basic interface return type declaration. * * @param string $class * @return Foo */ function foo(string $class): Foo { return new $class; } interface Foo { // } class Bar implements Foo { // } class Baz { // } var_dump(foo('Bar')); // object(Bar)#1 (0) { } var_dump(foo('Baz')); // PHP Fatal error: Uncaught TypeError: Return value of foo() must implement interface Foo, instance of Baz returned. ``` 严格类型也会对返回类型声明产生影响。在严格模式下,返回的值必须是指定的类型,否则将引发 `TypeError` 。 ```php <?php declare(strict_types=1); /** * Calculate the quotient of two integers. * * @param int $a * @param int $b * @return int */ function foo(int $a, int $b): int { return $a / $b; } var_dump(foo(2, 1)); // int(2) var_dump(foo(2, 4)); // PHP Fatal error: Uncaught TypeError: Return value of foo() must be of the type int, float returned. ``` 在默认的弱类型下,如果返回的值不是指定的类型,则它将被强制转换为正确的类型。 ```php <?php /** * Calculate the quotient of two integers. * * @param int $a * @param int $b * @return int */ function foo(int $a, int $b): int { return $a / $b; } var_dump(foo(2, 1)); // int(2) var_dump(foo(2, 4)); // int(0) ```