php資料型別之自動轉換與強制轉換

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 '凤姐凤姐爱死我,执行假区间咯';
}
?>

其他類型的自動型別轉換

自動型別轉換在運算時也可以發生。跟所有我們總結的規律和觀點一樣:先總結、後實驗。

只有標量在運算時會產生以下的自動型別轉換:

2015-07-28_55b79dcad98de.png

<?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);
?>


set 讀音:[sɛt]

解釋:設定

type 讀音:[taɪp]

解釋:類型、方式


繼續學習
||
<?php //浮点类型的的0,换成其他值试试 $bool = 0.0; if($bool){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>