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