php7型別約束的意義

2021-09-30 01:54:34 字數 1631 閱讀 2942

php7型別約束的意義

php7之前,函式和類方法不需要宣告變數型別,任何資料都可以被傳遞和返回,導致幾乎大部分的呼叫操作都要判斷返回的資料型別是否合格。

為了解決這個問題,php7引入了型別宣告。

目前有兩類變數可以宣告型別: 形參,返回值。

支援的型別有整形,浮點型,字串型,布林型。

如下**:

<?php

function

study

(int $get

)var_dump

(study

('ddd'))

;

為了節省**篇幅,為就不寫oop了,直接以函式為例。

此函式指定了引數型別為int, 而呼叫的時候傳入』ddd』字串,因此此**執行會產生fatal error錯誤。

而有些情況,php總是不那麼認真,如下:

<?php

function

study

(bool $get

)var_dump

(study

('ddd'))

;

指定引數型別為bool,但是傳入的字串被轉化成了true,執行後輸出的結果為:bool(true)

如要強制性約束型別,可在檔案頭部新增declare宣告:

<?php

declare

(strict_types =1)

;function

study

(bool $get

)var_dump

(study

('ddd'))

;

此時也會產生乙個致命錯誤,因為指定的引數型別為bool但是傳入的引數型別為string,只有把』ddd』換成true和false才可以,哪怕是1或0都不行。

接下來介紹一下返回型別宣告:

<?php

declare

(strict_types =1)

;function

study

(bool $get

): int

var_dump

(study

(true))

;

形參的括號後面加冒號加型別即可指定方法返回值的型別,指定了什麼型別返回的就是什麼型別。

同樣受declare影響,如果不做型別強制約束,那麼php會將返回的資料轉化為指定型別的資料再返回,目前差不多只有string無法強轉為int才會報錯。

如果指定了強制約束,那麼php將不會進行型別轉換,而是進行對比,如型別不同,則報錯。

還有,返回值型別,也可指定物件名,則必須返回指定物件的例項,如:

<?php

class

person

static

function

instance

(string $name

): person

}person:

:instance

('zhangsan'

);

這是php7的新特性之一:型別宣告。

PHP7型別約束

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

php 7新特性(一) 型別的限定

1 標量型別宣告 a.預設 以前的弱型別 b.嚴格 declare strict types 1 strict types的值 1或者0 1表示嚴格型別,0表示弱型別 可以使用的型別引數有 int float bool string inte ce array callable 2 嚴格了返回值型別...

php7 匿名繼承類 PHP7中的匿名類使用方法

在php7之後,php中加入了匿名類的特性。匿名類和匿名方法讓php成為了更現代化的語言,也讓我們的 開發工作越來越方便。我們先來看看匿名類的簡單使用。直接定義 obja new class public function getname echo i m obja obja getname 方法中...