首頁  >  文章  >  後端開發  >  為什麼說php是弱型別學,跟其他語言的差別

為什麼說php是弱型別學,跟其他語言的差別

怪我咯
怪我咯原創
2017-06-16 13:43:171400瀏覽

我想說:“Php的強大不言而喻”,這裡會應該有人說這個語言最強大,那個語言最好,小編聲明本專欄不比較哪個語言好與不好,本欄目只針對php語言的本性,以及跟我一樣在學習php的朋友一起分享我的經驗之談。小編不是php高手,小編只是php的忠實粉絲,投機的話可以跟小編一起聊聊php,一起分享大家的一些經驗。

昨天有人回覆我說何為弱類型,強調了三遍,我也沒解釋,今天就在這篇文章解釋一下何為弱類型,弱類型的好處以及弊端。小編之所以認為php很強大是因為php提供了許多獨特的特性工開發者使用,其中一個就是php弱型別機制。

先看一個例子,弱型別可以做以下這些操作:

例子1:

<?Php
$iruohong = 1; //整数型
$iruohong = array(); //数组型
$iruohong = “iruohong.com”; //字符串型
?>

有過一點程式設計經驗的朋友透過這段程式碼就有點弱類型的概念了,這就是php的弱型機制的其中一個表現,php核心的開發者是想透過這個不需要宣告的系統來提高開發者的開發效率。

然而這種機制會帶來一些麻煩,例如下面的一些比較會給你開發者帶來一些麻煩,如果開發者沒注意。

範例2:

<?Php
$a = null; $b = false;
If($a == $b){
echo “a和b相等!”;
}else{
echo “a和b不相等!”;
}
?>
<?Php
$a = &#39;&#39;; $b = 0; //同样为真
If($a == $b){
echo “a和b相等!”;
}else{
echo “a和b不相等!”;
}
?>

測試一下你會發現兩段程式碼都會輸出 a和b相等! ,新手朋友就會很詔異了怎麼會相等呢?小編也吃過這方面的虧,原因是在你比較的時候php不會嚴格檢驗傳入的變數類型,將變數自由的轉換類型。因為無論變數是0 null ‘’還是false,比較的時候php都預設為空,整數值的話都是0,所以就相等了。如果你非要比較出幾個值不一樣的話你就用“===”,三個等號代表完全相等,包括類型和值都相等。這是一些新手會犯的一些錯誤。

說了這麼多弱型別的東西,下面我們比較強型別和弱型別的差別。

(1)不管是強型別或弱型,變數都有兩個屬性:型別和值;也就是說,弱型別的變數同樣有型別。

不管是哪一種程式語言,其中使用的變量,都既有類型,又有值。強類型的變數類型,必須在原始程式碼中明確定義,稱之為“變數聲明”,弱類型的變數類型則是無需聲明的,由解釋器解釋。但是,這並不意味著,弱類型的變數就沒有類型這一概念了,舉例來說,PHP的gettype就是傳回該變數「目前」的類型。

(2)錯誤認識:【有人認為強類型的變數類型是不能改變的,弱型別變數是隨需改變的,強型別的變數一經聲明,就只能儲存這種類型的值,其他的值則必須透過轉換之後才能付給該變量,有編譯器自動理解的轉換,也有由程式設計師明確指定的強制轉換。弱型別的變數型別則是隨著需要不斷轉換。 】黑括號裡面的是錯誤認識,很多人都是這麼錯誤認識的,其實不管是前類型的變數類型還是弱類型的變數類型都是不能改變的。下面的例子就說明了一切,給$b賦值的時候$a的值是變化的,但是$a的類型是沒有變化的,下面例子請自行測試

例子3:

<?php
$a = 25;
echo $a.&#39;|&#39;.gettype($a).&#39;<br>&#39;;
$b = $a.&#39;good&#39;;
echo $b.&#39;|&#39;.gettype($b).&#39;<br>&#39;;
echo $a.&#39;|&#39;.gettype($a).&#39;<br>&#39;;
?>

輸出結果是:

25|integer25good|string25|integer

(3)強類型語言的強制轉換並沒有改變變數類型

強型別語言有個“強制轉換”,這改變的是變數的值的類型,以便進行賦值,而不會改變變數的類型。變數的型別是不允許改變的。

以上是為什麼說php是弱型別學,跟其他語言的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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