php資料型別之自動(dòng)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換
PHP在PHP 5.x階段都是完全的弱型別的程式語(yǔ)言。所謂弱類型,就是在宣告變數(shù)的時(shí)候,不需要指定變數(shù)的類型。我要聲明一個(gè)整數(shù)的變量,我不用在前面非得寫上類型,再寫變量。
而PHP 7?的效能有很大的提升。實(shí)際測(cè)試的結(jié)果,PHP 7的性能與PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我們可以強(qiáng)制指定類型,也可以不用強(qiáng)制指定類型來(lái)宣告變數(shù)。
我們接下來(lái)講強(qiáng)制型別轉(zhuǎn)換和自動(dòng)型別轉(zhuǎn)換兩個(gè)部份。
【默寫等級(jí)】布林值的自動(dòng)型別轉(zhuǎn)換、強(qiáng)制型別轉(zhuǎn)換的英文單字
布林值的自動(dòng)型別轉(zhuǎn)換
## 自動(dòng)型別轉(zhuǎn)換,就是資料型態(tài)在某些情況下,自動(dòng)會(huì)變成其他的類型參與運(yùn)算。自動(dòng)類型轉(zhuǎn)換的發(fā)生時(shí)機(jī)是:運(yùn)算和判斷的時(shí)候某些值會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。 下面的情況是布林值判斷時(shí)的自動(dòng)型別轉(zhuǎn)換:
#1,整數(shù)的0為假,其他整數(shù)值全為真2, 浮點(diǎn)的0.0,布林值的假。小數(shù)點(diǎn)後只要有一個(gè)非零的數(shù)值即為真。 3,空字串為假,只要裡面有一個(gè)空格都算真。 4,字串的0,也將其視為假。其他的都是真5,空數(shù)組也將其視為假,只要裡面有一個(gè)值,就為真。 6,空也為假7, 未聲明成功的資源也為假#我們針對(duì)以上針理的規(guī)則一項(xiàng)一項(xiàng)來(lái)做實(shí)驗(yàn)看看結(jié)果。
1,整數(shù)型的0為假,其他整數(shù)值全為真
<?php //整型的0,換成整型的其他值試試 $bool = 0; if($bool){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
2, 浮點(diǎn)的0.0,布林值的假。小數(shù)點(diǎn)後只要有一個(gè)非零的數(shù)值即為真。
<?php //浮點(diǎn)類型的的0,換成其他值試試 $bool = 0.0; if($bool){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
3,空字串為假,只要裡面有一個(gè)空格都算真。
<?php //空字符串,中間沒(méi)有空格喲。實(shí)驗(yàn)完加個(gè)空格試試 $str = ''; if($str){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
4,字串的0,也將其視為假。其他的都為真
<?php //0這個(gè)字符串喲,試試其他值看看 $str = '0'; if($str){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
5,空數(shù)組也將其視為假,只要裡面有一個(gè)值,就為真。
<?php //這個(gè)數(shù)組當(dāng)中啥也沒(méi)放 $arr = array(); if($arr){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
6,空也為假
<?php //聲明了一個(gè)空的變量$bool $bool = null; if($bool){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
7, 未聲成功的資源也為假
<?php //下面這段代碼會(huì)顯示警告,可忽略。暫時(shí)只需要對(duì)著實(shí)驗(yàn)知道效果即可:未聲成功的資源也為假 //下面這一塊了解意思就行:打開adasfasfasfdsa.txt這個(gè)不存在的文件 $res = fopen('adasfasfasfdsa.txt','r'); if($res){ echo '美女美女我愛你'; }else{ echo '鳳姐鳳姐愛死我,執(zhí)行假區(qū)間咯'; } ?>
其他類型的自動(dòng)型別轉(zhuǎn)換
自動(dòng)型別轉(zhuǎn)換在運(yùn)算時(shí)也可以發(fā)生。跟所有我們總結(jié)的規(guī)律和觀點(diǎn)一樣:先總結(jié)、後實(shí)驗(yàn)。 只有標(biāo)量在運(yùn)算時(shí)會(huì)產(chǎn)生以下的自動(dòng)型別轉(zhuǎn)換:<?php //布爾變整型參與運(yùn)算 $fo = true; $result = $fo + 10; //$result 結(jié)果為整型的11,因?yàn)?fo布爾的true變?yōu)榱? //如果$fo的值為0 var_dump($result); //字符串類型 $str = '419不要愛'; $result = $str + 1; //結(jié)果為420。因?yàn)閷?str變?yōu)榱苏偷?19參與運(yùn)算 //將419放在字符串中間和結(jié)尾試試 var_dump($result); ?>總結(jié):
布林值的true參與運(yùn)算是會(huì)變成整數(shù)或浮點(diǎn)的1布林值的false參與運(yùn)算是會(huì)變成整數(shù)或浮點(diǎn)的0字串開始處是整數(shù)或浮點(diǎn)類型的字符,會(huì)轉(zhuǎn)換成對(duì)應(yīng)的型別參與運(yùn)算
強(qiáng)制型別轉(zhuǎn)換
強(qiáng)制型別轉(zhuǎn)換有三種方式:
????1.後面的三個(gè)函數(shù)可以完成型別轉(zhuǎn)換, intval()、floatval()、strval()
????2.變數(shù)前加上()裡面寫上型,將它轉(zhuǎn)換後賦值給其他變數(shù)
????3.settype(變數(shù),型態(tài)) 直接改變量本身
我們來(lái)進(jìn)行實(shí)驗(yàn):
intval()、floatval()、strval()轉(zhuǎn)換
<?php $float = 1.23; $result = intval($float); //看看結(jié)果是不是變了? var_dump($result); //鴨脖子為整型的5 $yabozi = 5; $re = floatval($yabozi); var_dump($re); //定義整型的變量 $yabozi = 23; $bian = strval($yabozi); //強(qiáng)制變成字符串試試 var_dump($bian); ?>
變數(shù)前加上()裡面寫上類型,將它轉(zhuǎn)換後賦值給其他變數(shù)
<?php //定義一個(gè)變量,我們來(lái)變化一下試試 $transfer = 12.8; //把浮點(diǎn)變?yōu)檎? $jieguo = (int)$transfer; var_dump($jieguo); //把浮點(diǎn)變?yōu)椴紶? $jieguo = (bool) $transfer; var_dump($jieguo); //把布爾變整型 $bool = true; $jieguo = (int)$bool; var_dump($jieguo); //把浮點(diǎn)變數(shù)組 $fo = 250; $jieguo = (array)$fo; var_dump($jieguo); //其他的操作方式,按照文字總結(jié)的規(guī)律你來(lái)試試 ?>
settype(變量,類型) 直接改變量本身
<?php //定義浮點(diǎn)變?yōu)檎? $fo = 250.18; //settype第二個(gè)參數(shù)是int,你實(shí)驗(yàn)的時(shí)候要記得第二個(gè)參數(shù)要為字符串類型 settype($fo,'int'); //輸出看看結(jié)果 var_dump($fo); ?>
【你試試看】以下是強(qiáng)制類型轉(zhuǎn)換時(shí)的特點(diǎn),每一項(xiàng)你做實(shí)驗(yàn)看看對(duì)不對(duì):
#????1 .空轉(zhuǎn)為整數(shù)會(huì)為整數(shù)的0
????2.空轉(zhuǎn)為浮點(diǎn)會(huì)為浮點(diǎn)的0
????3.空轉(zhuǎn)為字串會(huì)為空字串''
????4.浮點(diǎn)的123.0轉(zhuǎn)為字串會(huì)為字串123
????5.浮點(diǎn)的123.2轉(zhuǎn)為字串會(huì)為字串的123.2
##???#?6.浮點(diǎn)即使小數(shù)點(diǎn)再大,它都會(huì)被幹掉,會(huì)捨掉小數(shù)點(diǎn)後面的值????7.如果字串轉(zhuǎn)為整數(shù)的時(shí)候,如果數(shù)值在前面,會(huì)將前面的數(shù)值拿出來(lái)做為整型的轉(zhuǎn)換值。 ????8.settype(變數(shù),'null'); 等價(jià)於unset()一個(gè)變數(shù)????9.$目標(biāo)變數(shù)= (類型)$作業(yè)變數(shù)只會(huì)改變目標(biāo)變數(shù)的型別,不會(huì)改變?cè)償?shù)的類型,Settype是改變?cè)?p><?php //小可愛,記得自己做實(shí)驗(yàn),驗(yàn)證上面的9點(diǎn)喲 $t=12.9; settype($t,'int'); var_dump($t); ?>
set?讀音:[s?t]
解釋:設(shè)定
解釋:類型、方式