重溫手冊(一):資料型別

Mingo1125發表於2021-01-16

布林型

範圍:

true;
false;

轉換:
為false的情況,其他情況一律為true

var_dump(boolval(0));         //bool(false)
var_dump(boolval(-0));        //bool(false)
var_dump(boolval(0.0));       //bool(false)
var_dump(boolval(-0.0));      //bool(false)
var_dump(boolval(''));        //bool(false)
var_dump(boolval('0'));       //bool(false)
var_dump(boolval(array()));   //bool(false)
var_dump(boolval(NULL));      //bool(false)
var_dump(boolval($var));      //bool(false) 未賦值的變數
//從空標記生成的 [SimpleXML](https://www.php.net/manual/zh/ref.simplexml.php) 物件

整型

範圍:

//64位有符號的整型範圍,超出範圍轉化成浮點型
echo PHP_INT_MAX; //9223372036854775807
echo PHP_INT_MIN; //-9223372036854775808

轉化:

var_dump(intval(true));        //int(1)
var_dump(intval(false));       //int(0)
var_dump(intval(3.14));        //int(3) 向下取整
var_dump(intval(NULL));        //int(0)
var_dump(intval('3.14e2'));    //int(314)
var_dump(intval('1.23'));      //int(1)
var_dump(intval('123abc'));    //int(123)
var_dump(intval('1a2b3c'));    //int(1)
var_dump(intval('a1b2c3'));    //int(0)
var_dump(intval(array(3)));    //int(1)
var_dump(intval(array()));     //int(0)

進位制:

var_dump(0b10); //int(2)  二進位制
var_dump(010);  //int(8)  八進位制
var_dump(10);   //int(10) 十進位制
var_dump(0x10); //int(16) 十六進位制

浮點型

範圍:通常最大值是 1.8e308 並具有 14 位十進位制數字的精度
轉化:

var_dump(floatval(true));      //float(1)
var_dump(floatval(false));     //float(0)
var_dump(floatval(NULL));      //float(0)
var_dump(floatval(123));       //float(123)
var_dump(floatval('3.14e2'));  //float(314)
var_dump(floatval('1.23'));    //float(1)
var_dump(floatval('123abc'));  //float(123)
var_dump(floatval('1a2b3c'));  //float(1)
var_dump(floatval('a1b2c3'));  //float(0)
var_dump(floatval(array(3)));  //float(1)
var_dump(floatval(array()));   //float(0)

比較:
可以使用round()函式做處理後再比較

$a = 0.8;
$b = 0.1 + 0.7;
var_dump($a);                         //float(0.8)
var_dump($b);                         //float(0.8)
var_dump($a == $b);                   //bool(false)
var_dump(round($a,2) == round($b,2)); //bool(true)

字元型

範圍:

$a = '單引號';

$b = "雙引號";

$c = <<<EOT
hereDOC的語法結構(雙引號包含的內容)
內容 。。。
內容 。。。
EOT;

$d = <<<'EOT'
nowdoc的語法結構(單引號包含的內容)
內容 。。。
內容 。。。
EOT;

轉化:

var_dump(strval(true));         //string(1) "1"
var_dump(strval(false));        //string(0) ""
var_dump(strval(NULL));         //string(0) ""
var_dump(strval(1));            //string(1) "1"
var_dump(strval(3.14));         //string(4) "3.14"
var_dump(strval(array(1,2,3))); //string(5) "Array"

轉義:

$a = 'hello:\'kitty\'';
echo $a; //hello:'kitty'
$b = "hello:\"kitty\"";
echo $b; //hello:"kitty"

包含:

$a = 'hello:"kitty"';
echo $a; //hello:"kitty"
$b = "hello:'kitty'";
echo $b; //hello:'kitty'

下標:

$str = 'abcdefg';
echo $str[0]; //a

陣列

範圍:key 可以是 integer 或者 string(其他會強制轉換成這兩種型別),value 可以是任意型別。

覆蓋:

$arr = array('a' => 1,'b' => 2,'a' => 3);
print_r($arr); //Array([a] => 3[b] => 2)

索引:

$arr = array(
    'a',
    5 => 'b',
    2 => 'c',
    'd' //沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一,按照正序依次增長
);
print_r($arr); //Array ( [0] => a [5] => b [2] => c [6] => d )

物件

new:

class test{}
$obj = new test(); //通過new一個類來生成一個物件
var_dump($obj); //object(test)#1 (0) { }

轉化:

$obj1 = (object)'hello';
var_dump($obj1);         //object(stdClass)#1 (1) { ["scalar"]=> string(5) "hello" } 
var_dump($obj1->scalar); //string(5) "hello"

$obj2 = (object)110;
var_dump($obj2);         //object(stdClass)#2 (1) { ["scalar"]=> int(110) }
var_dump($obj2->scalar); //int(110)

$obj3 = (object)array('hello',110,'name' => 'jack');
var_dump($obj3);        //object(stdClass)#3 (3) { ["0"]=> string(5) "hello" ["1"]=> int(110) ["name"]=> string(4) "jack" }
var_dump($obj3->{'0'}); //string(5) "hello"
var_dump($obj3->{'1'}); //int(110)
var_dump($obj3->name);  //string(4) "jack"

$obj4 = (object)true;
var_dump($obj4);         //object(stdClass)#4 (1) { ["scalar"]=> bool(true) }
var_dump($obj4->scalar); //bool(true)

$obj5 = (object)false;
var_dump($obj5);         //object(stdClass)#4 (1) { ["scalar"]=> bool(false) }
var_dump($obj5->scalar); //bool(false)

$obj6 = (object)3.14;
var_dump($obj6);         //object(stdClass)#6 (1) { ["scalar"]=> float(3.14) } 
var_dump($obj6->scalar); //float(3.14)

資源

概念:資源 resource 是一種特殊變數,儲存了到外部資源的一個引用。資源是通過專門的函式來建立和使用的。

$fp = fopen('error.txt','w');
var_dump($fp); //resource(3) of type (stream)
fclose($fp);

NULL

概念:特殊的 null 值表示一個變數沒有值。NULL 型別唯一可能的值就是 null。

$a = NULL;
$b;
$c = 1; unset($c);
var_dump($a); //NULL 變數被賦值為NULL的時候
var_dump($b); //NULL 變數沒有被賦值的時候
var_dump($c); //NULL 變數被unset的時候

Callable(偽型別)

概念:自定義的回撥函式

function myFunc(){
    echo '我的自定義函式';
}
call_user_func('myFunc'); //我的自定義函式
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章