首頁 >後端開發 >php教程 >php類型約束是什麼? php類型約束簡介和用法

php類型約束是什麼? php類型約束簡介和用法

不言
不言原創
2018-08-08 17:14:582524瀏覽

所謂類型限制就是定義變數的時候,必須指定其類型,而以後該變數也只能儲存該類型資料。在這篇文章中,我將要為大家介紹一下php類型約束以及用法。

php類型限制的介紹

PHP是弱型別語言,其特點是不需要為變數指定類型,而且在其後也可以儲存任何類型,當然這也是使用PHP能快速開發的關鍵點之一。但自PHP5起,我們就可以在函數(方法)形參中使用型別約束了。

函數的參數可以指定的範圍如下:

1、必須為物件(在函數原型裡面指定類別的名字);

2、介面;

3、陣列(PHP 5.1 起);

4、callable(PHP 5.4 起)。

5、如果使用 NULL 作為參數的預設值,那麼在呼叫函數的時候依然可以使用 NULL 作為實參。

6、如果一個類別或介面指定了類型約束,則其所有的子類別或實作也都如此。

注意:在PHP7以前,類型約束不能用於標量類型如 int 或 string。 Traits 也不允許。

php類型約束的用法:

下面是官方給的範例:

<?php
//如下面的类
class MyClass
{
    /**
     * 测试函数
     * 第一个参数必须为 OtherClass 类的一个对象
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }


    /**
     * 另一个测试函数
     * 第一个参数必须为数组 
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }
}

    /**
     * 第一个参数必须为递归类型
     */
    public function test_interface(Traversable $iterator) {
        echo get_class($iterator);
    }
    
    /**
     * 第一个参数必须为回调类型
     */
    public function test_callable(callable $callback, $data) {
        call_user_func($callback, $data);
    }
}

// OtherClass 类定义
class OtherClass {
    public $var = 'Hello World';
}
?>

函數呼叫的參數與定義的參數類型不一致時,會拋出一個可捕獲的致命錯誤。

<?php
// 两个类的对象
$myclass = new MyClass;
$otherclass = new OtherClass;

// 致命错误:第一个参数必须是 OtherClass 类的一个对象
$myclass->test('hello');

// 致命错误:第一个参数必须为 OtherClass 类的一个实例
$foo = new stdClass;
$myclass->test($foo);

// 致命错误:第一个参数不能为 null
$myclass->test(null);

// 正确:输出 Hello World 
$myclass->test($otherclass);

// 致命错误:第一个参数必须为数组
$myclass->test_array('a string');

// 正确:输出数组
$myclass->test_array(array('a', 'b', 'c'));

// 正确:输出 ArrayObject
$myclass->test_interface(new ArrayObject(array()));

// 正确:输出 int(1)
$myclass->test_callable('var_dump', 1);
?>

類型限制不只是用在類別的成員函數裡,也能使用在函數裡:

<?php
// 如下面的类
class MyClass {
    public $var = &#39;Hello World&#39;;
}

/**
 * 测试函数
 * 第一个参数必须是 MyClass 类的一个对象
 */
function MyFunction (MyClass $foo) {
    echo $foo->var;
}

// 正确
$myclass = new MyClass;
MyFunction($myclass);
?>

類型約束允許NULL 值:

<?php

/* 接受 NULL 值 */
function test(stdClass $obj = NULL) {

}

test(NULL);
test(new stdClass);

?>

PHP7

標量類型宣告(PHP 7)

標量類型宣告有兩種模式: 強制(預設) 和嚴格模式。
現在可以使用下列型別參數(無論是強制模式或嚴格模式):

1、字串(string),

2、整數(int),

3、浮點數(float),

4、布林值(bool)。

它們擴充了PHP5中引入的其他類型:類別名,接口,數組和 回調類型。

<?php
// 强制模式
function sumOfInts(int ...$ints)
{
     return array_sum($ints);
}
 
var_dump(sumOfInts(2, '3', 4.1));

以上範例的運作結果會輸出:int(9)

要使用嚴格模式,一個 declare 宣告指令必須放在檔案的頂端。這意味著嚴格聲明標量是基於文件可配的。這個指令不僅影響參數的型別聲明,也影響到函數的回傳值聲明。

相關文章推薦:

PHP中的類型約束介紹,PHP類型約束介紹

php中類型約束的思路代碼分享

如何使用型別約束來限定php函數型別

以上是php類型約束是什麼? php類型約束簡介和用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn