PHP型別約束

2022-01-26 05:00:21 字數 2329 閱讀 8688

型別約束,即定義乙個變數的時候,必須指定其型別,並且以後該變數也只能儲存該型別資料。

php作為弱型別語言,其特點是無需為變數指定型別,而且在其後也可以儲存任何型別,但是在php的新語法中,在某些特定場合,針對某些特定型別,也可進行語法約束。php 5開始,在物件導向中,為方法帶來了型別約束,php 7完善了對型別限制的支援,補上了之前的短缺,包括標量型別、返回值型別。

php中接近完善的型別約束,降低了**中一些因為型別約束而導致的問題。

演變過程

1.  早期的約束

雖然 php 是隱式轉換,但是在實際開發中也會存在一些無法轉換的窘境,當然這些問題我們在開發階段很容易發現,但是如果是一些動態的內容導致不可控就會呈現在使用者面前,也就是 bug ,在 php 中有一批以 is_* 開頭的方法用來做一些簡單型別判斷。

只支援物件、介面、陣列、函式型別約束

3.   php 7+

增加了標量型別、返回值型別、可為空(nullable)型別 (php 7.1)、void函式,在 php 7.1 中還加入了嚴格型別驗證

型別約束的使用

1、標量、物件、介面、陣列、函式型別

1

<?php23

/**4* @param string $name

5* @param int $age

6* @param float $height

7* @param bool $isboy8*/

9function sayinfo(string

$name, int $age, float

$height, bool $isboy)10

1314 sayinfo("小明", 16, "170cm", true

);15

16//

輸出結果

17// 姓名:小明,年齡:16,身高:170,是否為男孩:是

function f(類名 $p){}// 要求引數只能使用該類的物件

function f(介面名 $p){}// 要求該引數只能使用實現該介面的物件

function f(arrary $p){}// 要求該引數只能使用陣列

function f(callable $p)// 要求該引數只能是乙個函式(方法),此時稱之為**函式(方法)

在專案中的運用如下圖:

說明:

此處要求構造方法中的引數必須是emailsenderby163(郵件傳送類)的物件

2、返回值型別

1)返回值型別,也可指定物件名,則必須返回指定物件的例項

2)如果不做型別強制約束,那麼php會將返回的資料轉化為指定型別的資料再返回,目前差不多只有string無法強轉為int才會報錯。如果指定了強制約束,那麼php將不會進行型別轉換,而是進行對比,如型別不同,則報錯。

1

<?php

2declare(strict_types = 1);//

型別強制約束34

class

address510

}1112class

person

1317

public

function b():?int

20public

function age(float

$age) : float

2124

25public

function name(string

$name) : string

2629

30public

function isalive(bool $alive) : ?string

3134

//返回的必須是address類的例項

35public

function getaddress() :address

3639}40

41$person = new

person();

42var_dump($person->getaddress());

php拾遺 型別約束

突然間什麼都不想幹,感覺就像來大姨夫一樣。但是又不能斷了每個工作日都寫部落格的習慣。所以今天水一下吧。php用了快2年了,但是這東西竟然第一次看到,突然間,覺得自己有掉回戰五渣的行列了。翻開官方文件 型別約束 裡面講的非常清楚了。總共就四種 類名,介面,陣列,callable php 5.4起 那些...

PHP7型別約束

在php7之前,函式和類方法不需要宣告變數型別,任何資料都可以被傳遞和返回,導致幾乎大部分的呼叫操作都要判斷返回的資料型別是否合格。為了解決這個問題,php7引入了型別宣告。目前有兩類變數可以宣告型別 形參,返回值。支援的型別有整形,浮點型,字串型,布林型。如下 function study int...

mysql約束 MySQL 約束型別

約束是一種限制,它通過對錶的行或列的資料做出限制,來確保表的資料的完整性 唯一性。mysql中,常用的幾種約束 約束型別 主鍵外來鍵唯一非空自增預設值 關鍵字 primary key foreign key unique not null auto increment default 1 主鍵約束 ...