摘要:但是在以來(lái),在面向?qū)ο笾?,為方法帶?lái)了類(lèi)型約束,然而這些都非常的雞肋,從文檔上可以看到。支持對(duì)象接口支持?jǐn)?shù)組支持匿名函數(shù)類(lèi)型約束不能用于標(biāo)量類(lèi)型如或。它的運(yùn)作方式,是在中設(shè)置一個(gè)標(biāo)志位,讓函數(shù)調(diào)用和返回類(lèi)型檢查符合類(lèi)型約束。
起點(diǎn)
眾所周知,PHP 是弱類(lèi)型語(yǔ)言,與其他強(qiáng)類(lèi)型語(yǔ)言項(xiàng)目,在這方面會(huì)有很多的坑,但是已經(jīng)發(fā)展到 PHP 7 之后,PHP 也對(duì)類(lèi)型約束有了所指,并且在許多流行框架中被大量使用比如Laravel,因?yàn)檫@確確實(shí)實(shí)在軟件開(kāi)發(fā)過(guò)程中無(wú)論是運(yùn)行,還是 IDE 的代碼提示都能為我們帶來(lái)極大的便利,下面就一步步來(lái)看看 PHP 中的類(lèi)型約束。
早期的約束雖然 PHP 是隱式轉(zhuǎn)換,但是在實(shí)際開(kāi)發(fā)中也會(huì)存在一些無(wú)法轉(zhuǎn)換的窘境,當(dāng)然這些問(wèn)題我們?cè)陂_(kāi)發(fā)階段很容易發(fā)現(xiàn),但是如果是一些動(dòng)態(tài)的內(nèi)容導(dǎo)致不可控就會(huì)呈現(xiàn)在用戶面前,也就是 BUG ,在 PHP 中有一批以 is_* 開(kāi)頭的方法用來(lái)做一些簡(jiǎn)單類(lèi)型判斷(這其中一些方法也是新方法沒(méi)有翻譯的基本都是)。
is_array — 檢測(cè)變量是否是數(shù)組
is_bool — 檢測(cè)變量是否是布爾型
is_callable — 檢測(cè)參數(shù)是否為合法的可調(diào)用結(jié)構(gòu)
is_countable — Verify that the contents of a variable is a countable value
is_double — is_float 的別名
is_float — 檢測(cè)變量是否是浮點(diǎn)型
is_int — 檢測(cè)變量是否是整數(shù)
is_integer — is_int 的別名
is_iterable — Verify that the contents of a variable is an iterable value
is_long — is_int 的別名
is_null — 檢測(cè)變量是否為 NULL
is_numeric — 檢測(cè)變量是否為數(shù)字或數(shù)字字符串
is_object — 檢測(cè)變量是否是一個(gè)對(duì)象
is_real — is_float 的別名
is_resource — 檢測(cè)變量是否為資源類(lèi)型
is_scalar — 檢測(cè)變量是否是一個(gè)標(biāo)量
is_string — 檢測(cè)變量是否是字符串
is_a — 如果對(duì)象屬于該類(lèi)或該類(lèi)是此對(duì)象的父類(lèi)則返回 TRUE
is_subclass_of — 如果此對(duì)象是該類(lèi)的子類(lèi),則返回 TRUE
在 PHP 5 之前,如果我們要做類(lèi)型約束,那么就必須用到這些,這些方法對(duì)參數(shù)進(jìn)行復(fù)雜的判斷,并處理錯(cuò)誤返回給調(diào)用者。
但是在 PHP 5 以來(lái),在面向?qū)ο笾?,?b>方法帶來(lái)了類(lèi)型約束,然而這些都非常的雞肋,從文檔上可以看到。
PHP 5 支持 對(duì)象、接口、
PHP 5.1 支持 數(shù)組
PHP 5.4 支持匿名函數(shù)
類(lèi)型約束不能用于標(biāo)量類(lèi)型如 int 或 string。Traits 也不允許。
在 PHP 5 中其實(shí)光是第一條,就夠大部分場(chǎng)景使用,但是也有一些知名問(wèn)題,比如最后一條的 不支持標(biāo)量類(lèi)型 ,也就是說(shuō)支持不是很全面,而且還有一種情況沒(méi)有考慮 那就 null 雖然 null 是一個(gè)特殊類(lèi)型,但是有時(shí)候當(dāng)數(shù)據(jù)不可控時(shí)也會(huì)出現(xiàn),而且,在 PHP 5 階段,類(lèi)型約束并沒(méi)有被很好的使用,或許是那個(gè)時(shí)候并不是那么的重視,畢竟弱類(lèi)型是 PHP 的一大特點(diǎn),但也是致命傷,甚至很多時(shí)候被強(qiáng)類(lèi)型語(yǔ)言牽著鼻子走。
PHP 7PHP 7 相對(duì)于先前的PHP版本可謂是煥然一新。
錯(cuò)誤與異常的處理
標(biāo)量類(lèi)型聲明
返回值類(lèi)型聲明
可為空(Nullable)類(lèi)型 (PHP 7.1)
Void 函數(shù)
比較扎眼的就是完善了對(duì)類(lèi)型限制的支持,補(bǔ)上了之前的短缺,包括標(biāo)量類(lèi)型、返回值類(lèi)型,而且,在 PHP 7.1 中還加入了嚴(yán)格類(lèi)型驗(yàn)證。
強(qiáng)制類(lèi)型驗(yàn)證 strict_types/declare()指令默認(rèn)情況下,所有的PHP文件都處于弱類(lèi)型校驗(yàn)?zāi)J?。新的declare指令,通過(guò)指定strict_types的值(1或者0),1表示嚴(yán)格類(lèi)型校驗(yàn)?zāi)J?,作用于函?shù)調(diào)用和返回語(yǔ)句;0表示弱類(lèi)型校驗(yàn)?zāi)J健?/p>
declare(strict_types=1)必須是文件的第一個(gè)語(yǔ)句。如果這個(gè)語(yǔ)句出現(xiàn)在文件的其他地方,將會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤,塊模式是被明確禁止的。
類(lèi)似于encoding指令,但不同于ticks指令,strict_types指令只影響指定使用的文件,不會(huì)影響被它包含(通過(guò)include等方式)進(jìn)來(lái)的其他文件。該指令在運(yùn)行時(shí)編譯,不能修改。它的運(yùn)作方式,是在opcode中設(shè)置一個(gè)標(biāo)志位,讓函數(shù)調(diào)用和返回類(lèi)型檢查符合類(lèi)型約束。
舉個(gè)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31198.html
摘要:工程化的思維可以在項(xiàng)目起手的階段大致構(gòu)建出整個(gè)框架,然后逐步的去添加功能。工程化的思維可以快速的解決問(wèn)題,從面到點(diǎn),而不是從點(diǎn)到線。 任何計(jì)算機(jī)語(yǔ)言都是工具,都是用來(lái)解決問(wèn)題。所有的現(xiàn)代編程語(yǔ)言都有相同之處,基本類(lèi)型值(string number boolean......),引用類(lèi)型值(數(shù)組,對(duì)象,函數(shù),類(lèi)),語(yǔ)句(if,switch,while,do while......),甚至...
摘要:工程化的思維可以在項(xiàng)目起手的階段大致構(gòu)建出整個(gè)框架,然后逐步的去添加功能。工程化的思維可以快速的解決問(wèn)題,從面到點(diǎn),而不是從點(diǎn)到線。 任何計(jì)算機(jī)語(yǔ)言都是工具,都是用來(lái)解決問(wèn)題。所有的現(xiàn)代編程語(yǔ)言都有相同之處,基本類(lèi)型值(string number boolean......),引用類(lèi)型值(數(shù)組,對(duì)象,函數(shù),類(lèi)),語(yǔ)句(if,switch,while,do while......),甚至...
摘要:但是在的高版本語(yǔ)法中起,在某些特定場(chǎng)合,針對(duì)某些特定類(lèi)型,也是可以進(jìn)行語(yǔ)法約束的。注意在以前,類(lèi)型約束不能用于標(biāo)量類(lèi)型如或。這意味著嚴(yán)格聲明標(biāo)量是基于文件可配的。這個(gè)指令不僅影響參數(shù)的類(lèi)型聲明,也影響到函數(shù)的返回值聲明。 前言 眾所周知,在 強(qiáng)類(lèi)型 語(yǔ)言中,類(lèi)型約束 是語(yǔ)法上的要求,即:定義一個(gè)變量的時(shí)候,必須指定其類(lèi)型,并且以后該變量也只能存儲(chǔ)該類(lèi)型數(shù)據(jù)。 而我們的PHP是弱類(lèi)型語(yǔ)言...
摘要:導(dǎo)語(yǔ)所謂類(lèi)型約束,即定義一個(gè)變量的時(shí)候,必須指定其類(lèi)型,并且以后該變量也只能存儲(chǔ)該類(lèi)型數(shù)據(jù)。當(dāng)類(lèi)型約束為接口時(shí),可以傳入實(shí)現(xiàn)接口的類(lèi)或。參考資料類(lèi)型約束標(biāo)量類(lèi)型聲明。 導(dǎo)語(yǔ) 所謂類(lèi)型約束,即定義一個(gè)變量的時(shí)候,必須指定其類(lèi)型,并且以后該變量也只能存儲(chǔ)該類(lèi)型數(shù)據(jù)。PHP 雖然是弱類(lèi)型語(yǔ)言,但是在 PHP 5 已經(jīng)支持類(lèi)型約束,包括對(duì)象、接口、數(shù)組,在 PHP 7 之后支持標(biāo)量類(lèi)型約束,下...
閱讀 2811·2021-11-22 14:44
閱讀 555·2021-11-22 12:00
閱讀 3692·2019-08-30 15:54
閱讀 1586·2019-08-29 17:15
閱讀 1907·2019-08-29 13:50
閱讀 1122·2019-08-29 13:17
閱讀 3523·2019-08-29 13:05
閱讀 1190·2019-08-29 11:31