php數(shù)據(jù)類型之自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換
PHP在PHP 5.x階段都是完全的弱類型的編程語言。所謂弱類型,就是在聲明變量的時(shí)候,不需要指定變量的類型。我要聲明一個(gè)整型的變量,我不用在前面非得寫上類型,再寫變量。
而PHP 7?的性能有很大的提高。實(shí)際測試的結(jié)果,PHP 7的性能與PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我們可以強(qiáng)制指定類型,也可以不用強(qiáng)制指定類型來聲明變量。
我們接來下來講強(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)換,就是數(shù)據(jù)類型在某些情況下,自動(dòng)會(huì)變?yōu)槠渌念愋蛥⑴c運(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,整型的0為假,其他整型值全為真
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)來做實(shí)驗(yàn)看看結(jié)果。
1,整型的0為假,其他整型值全為真
<?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 //空字符串,中間沒有空格喲。實(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)中啥也沒放 $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ì)變成整型或者浮點(diǎn)的1布爾值的false參與運(yùn)算是會(huì)變成整型或者浮點(diǎn)的0字符串開始處是整型或浮點(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.變量前加上()里面寫上類型,將它轉(zhuǎn)換后賦值給其他變量
????3.settype(變量,類型) 直接改變量本身
我們來進(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); ?>
變量前加上()里面寫上類型,將它轉(zhuǎn)換后賦值給其他變量
<?php //定義一個(gè)變量,我們來變化一下試試 $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ī)律你來試試 ?>
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)為整型會(huì)為整型的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ù)值在前面,會(huì)將前面的數(shù)值拿出來做為整型的轉(zhuǎn)換值。
????8.settype(變量,'null'); 等價(jià)于 unset()一個(gè)變量
????9.$目標(biāo)變量 = (類型)$操作變量 只會(huì)改變目標(biāo)變量的類型,不會(huì)改變?cè)兞康念愋?,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è)置
type?讀音:[ta?p]
解釋:類型、方式