溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP類型約束是什么

發(fā)布時間:2020-10-29 11:40:52 來源:億速云 閱讀:113 作者:小新 欄目:編程語言

PHP類型約束是什么?這個問題可能是我們?nèi)粘W習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

導語:所謂類型約束,即定義一個變量的時候,必須指定其類型,并且以后該變量也只能存儲該類型數(shù)據(jù)。PHP 雖然是弱類型語言,但是在 PHP 5 已經(jīng)支持類型約束,包括對象、接口、數(shù)組,在 PHP 7 之后支持標量類型約束,下面簡單寫幾個示例。

標量類型、數(shù)組

在參數(shù)中指明類型,如果不一致,會拋出一個可捕獲的致命錯誤

<?php

/**
 * 數(shù)組類型約束
 * @param array $arr
 */
function printArray(array $arr)
{
    echo implode(',', $arr);
}

printArray(array(1, 2, 3));// 1,2,3
printArray('1');// Fatal error: Uncaught TypeError: Argument 1 passed to printArray() must be of the type array, string given, called in D:\WWW\test.php on line 13 and defined in D:\WWW\test.php:7 Stack trace: #0 D:\WWW\test.php(13): printArray('1') #1 {main} thrown in D:\WWW\test.php on line 7

如上所示,標量類型也是如此

<?php

/**
 * 標量類型約束
 * @param string $name
 * @param int $age
 * @param float $height
 * @param bool $isBoy
 */
function sayInfo(string $name, int $age, float $height, bool $isBoy)
{
    echo '姓名:' . $name . ',年齡:' . $age . ',身高:' . $height . ',是否為男孩:' . ($isBoy ? '是' : '否');
}

sayInfo('tom', 12, 134.5, true);// 姓名:tom,年齡:12,身高:134.5,是否為男孩:是

對象、接口

類型約束也可以指定為對象或者接口。首先定義一個 Human 接口,BoyGirl 兩個類分別實現(xiàn)接口

<?php

/**
 * 接口
 * Interface Human
 */
interface Human
{
    public function say();

    public function run();
}

/**
 * 實現(xiàn) Human 接口
 * Class Boy
 */
class Boy implements Human
{
    public function say()
    {
        echo 'a boy say';
    }

    public function run()
    {
        echo 'a boy run';
    }
}

/**
 * 實現(xiàn) Human 接口
 * Class Girl
 */
class Girl implements Human
{
    public function say()
    {
        echo 'a girl say';
    }

    public function run()
    {
        echo 'a girl run';
    }
}

接下來新建一個類來測試

<?php

include './human.php';

class Action
{
    /**
     * Boy 對象類型約束
     * @param Boy $boy
     */
    public function boySay(Boy $boy)
    {
        $boy->say();
    }

    /**
     * Girl 對象類型約束
     * @param Girl $girl
     */
    public function girlSay(Girl $girl)
    {
        $girl->say();
    }

    /**
     * Human 接口類型約束
     * @param Human $obj
     */
    public function humanRun(Human $obj)
    {
        $obj->run();
    }
}

$obj = new Action();
$obj->boySay(new Boy());// a boy say
echo '<br />';
$obj->girlSay(new Girl());// a girl say
echo '<br />';
$obj->humanRun(new Boy());// a boy run
echo '<br />';
$obj->humanRun(new Girl());// a girl run

當類型約束為具體對象 Boy 或者 Girl 時,只能傳入要求的對象。當類型約束為接口 Human 時,可以傳入實現(xiàn)接口的類 BoyGirl。

感謝各位的閱讀!看完上述內(nèi)容,你們對PHP類型約束是什么大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI