首頁 >後端開發 >PHP問題 >php是強型別語言嗎

php是強型別語言嗎

王林
王林原創
2019-09-19 17:56:594067瀏覽

php是強型別語言嗎

PHP 是一門弱型別語言

我們注意到,不必向 PHP 宣告該變數的資料型別。

PHP 會根據變數的值,自動把變數轉換為正確的資料型別。在強類型的程式語言中,我們必須在使用變數之前先聲明(定義)變數的類型和名稱。

1. 先定義一些基礎概念

#Program Errors

trapped errors。導致程式終止執行,如除0,Java中數組越界存取untrapped errors。出錯後繼續執行,但可能出現任意行為。當C裡的緩衝區溢位、Jump到錯誤位址

Forbidden Behaviours

語言設計時,可以定義一組forbidden behaviors. 它必須包括所有untrapped errors,但可能包含trapped errors.

Well behaved、ill behaved

well behaved: 如果程式執行不可能出現forbidden behaviors, 則為well behaved。

ill behaved: 否則為ill behaved...

2. 有了上面的概念,再討論強、弱類型,靜態、動態類型

強、弱型別

強型別strongly typed: 如果一種語言的所有程式都是well behaved-即不可能出現forbidden behaviors,則該語言為strongly typed。

弱型別weakly typed: 否則為weakly typed。例如C語言的緩衝區溢出,屬於trapped errors,即屬於forbidden behaviors..故C是弱類型前面的人也說了,弱類型語言,類型檢查更不嚴格,如偏向於容忍隱式類型轉換。譬如說C語言的int可以變成double。這樣的結果是:容易產生forbidden behaviours,所以是弱型別的

#動態、靜態型別

##。如果在編譯時拒絕ill behaved程序,則是statically typed;

動態類型dynamiclly

: 如果在運行時拒絕ill behaviors, 則是dynamiclly typed。

3. 迷思

大家覺得C語言要寫int a, int b之類的,Python不用寫(可以直接寫a, b),所以C是靜態, Python是動態。這麼理解是不夠準確的。譬如Ocaml是靜態型別的,但是也可以不用明確地寫出來。 Ocaml是靜態隱式類型

靜態類型可以分為兩種:

如果類型是語言語法的一部分,在是explicitly typed顯式類型;如果類型通過編譯時推導,是implicity typed隱式類型, 如#ML和Haskell
4.以下是些範例
無型別: 彙編 弱型別、靜態型別: C/C
弱型別、動態型別檢查: Perl/PHP
強型別、靜態型別檢查:Java/C
#強型別、動態型別檢查:Python, Scheme
靜態明確型別:Java/C
靜態隱式類型:Ocaml, Haskell

以上內容僅供參考!

推薦教學:

PHP影片教學

#

以上是php是強型別語言嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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