PHP在PHP 5.x階段都是完全的弱型別的程式語言。所謂弱類型,就是在宣告變數的時候,不需要指定變數的類型。我要聲明一個整數的變量,我不用在前面非得寫上類型,再寫變量。
而PHP 7 的效能有很大的提升。實際測試的結果,PHP 7的性能與PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我們可以強制指定類型,也可以不用強制指定類型來宣告變數。
我們接下來講強制型別轉換和自動型別轉換兩個部份。
【默寫等級】布林值的自動型別轉換、強制型別轉換的英文單字
布林值的自動型別轉換
## 自動型別轉換,就是資料型態在某些情況下,自動會變成其他的類型參與運算。自動類型轉換的發生時機是:運算和判斷的時候某些值會自動進行轉換。 下面的情況是布林值判斷時的自動型別轉換:
#1,整數的0為假,其他整數值全為真2, 浮點的0.0,布林值的假。小數點後只要有一個非零的數值即為真。 3,空字串為假,只要裡面有一個空格都算真。 4,字串的0,也將其視為假。其他的都是真5,空數組也將其視為假,只要裡面有一個值,就為真。 6,空也為假7, 未聲明成功的資源也為假#我們針對以上針理的規則一項一項來做實驗看看結果。
1,整數型的0為假,其他整數值全為真
<?php //整型的0,换成整型的其他值试试 $bool = 0; if($bool){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
2, 浮點的0.0,布林值的假。小數點後只要有一個非零的數值即為真。
<?php //浮点类型的的0,换成其他值试试 $bool = 0.0; if($bool){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
3,空字串為假,只要裡面有一個空格都算真。
<?php //空字符串,中间没有空格哟。实验完加个空格试试 $str = ''; if($str){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
4,字串的0,也將其視為假。其他的都為真
<?php //0这个字符串哟,试试其他值看看 $str = '0'; if($str){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
5,空數組也將其視為假,只要裡面有一個值,就為真。
<?php //这个数组当中啥也没放 $arr = array(); if($arr){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
6,空也為假
<?php //声明了一个空的变量$bool $bool = null; if($bool){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
7, 未聲成功的資源也為假
<?php //下面这段代码会显示警告,可忽略。暂时只需要对着实验知道效果即可:未声成功的资源也为假 //下面这一块了解意思就行:打开adasfasfasfdsa.txt这个不存在的文件 $res = fopen('adasfasfasfdsa.txt','r'); if($res){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
其他類型的自動型別轉換
自動型別轉換在運算時也可以發生。跟所有我們總結的規律和觀點一樣:先總結、後實驗。 只有標量在運算時會產生以下的自動型別轉換:<?php //布尔变整型参与运算 $fo = true; $result = $fo + 10; //$result 结果为整型的11,因为$fo布尔的true变为了1 //如果$fo的值为0 var_dump($result); //字符串类型 $str = '419不要爱'; $result = $str + 1; //结果为420。因为将$str变为了整型的419参与运算 //将419放在字符串中间和结尾试试 var_dump($result); ?>總結:
布林值的true參與運算是會變成整數或浮點的1布林值的false參與運算是會變成整數或浮點的0字串開始處是整數或浮點類型的字符,會轉換成對應的型別參與運算
強制型別轉換
強制型別轉換有三種方式:
1.後面的三個函數可以完成型別轉換, intval()、floatval()、strval()
2.變數前加上()裡面寫上型,將它轉換後賦值給其他變數
3.settype(變數,型態) 直接改變量本身
我們來進行實驗:
intval()、floatval()、strval()轉換
<?php $float = 1.23; $result = intval($float); //看看结果是不是变了? var_dump($result); //鸭脖子为整型的5 $yabozi = 5; $re = floatval($yabozi); var_dump($re); //定义整型的变量 $yabozi = 23; $bian = strval($yabozi); //强制变成字符串试试 var_dump($bian); ?>
變數前加上()裡面寫上類型,將它轉換後賦值給其他變數
<?php //定义一个变量,我们来变化一下试试 $transfer = 12.8; //把浮点变为整型 $jieguo = (int)$transfer; var_dump($jieguo); //把浮点变为布尔 $jieguo = (bool) $transfer; var_dump($jieguo); //把布尔变整型 $bool = true; $jieguo = (int)$bool; var_dump($jieguo); //把浮点变数组 $fo = 250; $jieguo = (array)$fo; var_dump($jieguo); //其他的操作方式,按照文字总结的规律你来试试 ?>
settype(變量,類型) 直接改變量本身
<?php //定义浮点变为整型 $fo = 250.18; //settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型 settype($fo,'int'); //输出看看结果 var_dump($fo); ?>
【你試試看】以下是強制類型轉換時的特點,每一項你做實驗看看對不對:
# 1 .空轉為整數會為整數的0
2.空轉為浮點會為浮點的0
3.空轉為字串會為空字串''
4.浮點的123.0轉為字串會為字串123
5.浮點的123.2轉為字串會為字串的123.2
## # 6.浮點即使小數點再大,它都會被幹掉,會捨掉小數點後面的值 7.如果字串轉為整數的時候,如果數值在前面,會將前面的數值拿出來做為整型的轉換值。 8.settype(變數,'null'); 等價於unset()一個變數 9.$目標變數= (類型)$作業變數只會改變目標變數的型別,不會改變原變數的類型,Settype是改變原值<?php //小可爱,记得自己做实验,验证上面的9点哟 $t=12.9; settype($t,'int'); var_dump($t); ?>
解釋:設定
解釋:類型、方式