PHP 標量類型與返回值類型聲明

PHP 7 新特性 PHP 7 新特性


標量類型聲明

默認情況下,所有的PHP檔都處於弱類型校驗模式。

PHP 7 增加了標量類型聲明的特性,標量類型聲明有兩種模式:

  • 強制模式 (默認)
  • 嚴格模式

標量類型聲明語法格式:

declare(strict_types=1);

代碼中通過指定 strict_types的值(1或者0),1表示嚴格類型校驗模式,作用於函數調用和返回語句;0表示弱類型校驗模式。

可以使用的類型參數有:

  • int

  • float

  • bool

  • string

  • interfaces

  • array

  • callable

強制模式實例

實例

<?php
// 強制模式
function sum(int ...$ints)
{
   return 
array_sum($ints);
}

print(
sum(2'3'4.1));
?>

以上程式執行輸出結果為:

9

實例匯總將參數 4.1 轉換為整數 4 後再相加。

嚴格模式實例

實例

<?php
// 嚴格模式
declare(strict_types=1);

function 
sum(int ...$ints)
{
   return 
array_sum($ints);
}

print(
sum(2'3'4.1));
?>

以上程式由於採用了嚴格模式,所以如果參數中出現不適整數的類型會報錯,執行輸出結果為:

PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……

返回類型聲明

PHP 7 增加了對返回類型聲明的支持,返回類型聲明指明了函數返回值的類型。

可以聲明的返回類型有:

  • int

  • float

  • bool

  • string

  • interfaces

  • array

  • callable

返回類型聲明實例

實例中,要求返回結果為整數:

實例

<?php
declare(strict_types=1);

function 
returnIntValue(int $value): int
{
   return 
$value;
}

print(
returnIntValue(5));
?>

以上程式執行輸出結果為:

5

返回類型聲明錯誤實例

實例

<?php
declare(strict_types=1);

function 
returnIntValue(int $value): int
{
   return 
$value 1.0;
}

print(
returnIntValue(5));
?>

以上程式由於採用了嚴格模式,返回值必須是 int,但是計算結果是float,所以會報錯,執行輸出結果為:

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

void 函數

一個新的返回值類型void被引入。 返回值聲明為 void 類型的方法要麼乾脆省去 return 語句,要麼使用一個空的 return 語句。 對於 void 函數來說,NULL 不是一個合法的返回值。

返回的類型還有 void,定義返回類型為 void 的函數不能有返回值,即使返回 null 也不行。

void 函數可以省去 return 語句,或者使用一個空的 return 語句。

實例

<?php
function swap(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

以上實例輸出結果:

null
int(2)
int(1)

PHP 7 新特性 PHP 7 新特性