總括
PHP數據類型包括8種:其中包括四種標量類型、兩種復合類型和兩種特殊類型。具體是:字符串、整數、浮點數、布爾、數組、對象、NULL、資源
如果想查看某個表達式的值和類型,可以使用函數var_dump()
<?php
$var = 1;
//int 1
echo var_dump($var);
echo '<br>';
$var = 1.0;
//float 1
echo var_dump($var);
echo '<br>';
$var = true;
//boolean true
echo var_dump($var);
echo '<br>';
$var = '1';
//string '1' (length=1)
echo var_dump($var);
echo '<br>';
?>
布爾型
布爾型是最簡單的類型。boolean表達了真值,可以為TRUE或FALSE
要指定一個布爾值,使用關鍵字 TRUE 或 FALSE。兩個都不區分大小寫
<?php $foo = True; // assign the value TRUE to $foo ?>
轉換
要明確地將一個值轉換成 boolean,用 (bool) 或者 (boolean) 來強制轉換
假值
當轉換為boolean時,以下值被認為是 FALSE:
布爾值 FALSE 本身
整型值 0
浮點型值 0.0
空字符串,以及字符串 "0"
不包括任何元素的數組
不包括任何成員變量的對象(僅 PHP 4.0 適用)
特殊類型 NULL(包括尚未賦值的變量)
從空標記生成的SimpleXML對象
<?php var_dump((bool) ""); // bool(false) var_dump((bool) 1); // bool(true) var_dump((bool) -2); // bool(true) var_dump((bool) "foo"); // bool(true) var_dump((bool) 2.3e5); // bool(true) var_dump((bool) array(12)); // bool(true) var_dump((bool) array()); // bool(false) var_dump((bool) "false"); // bool(true) ?>
檢測
is_bool()函數用來檢測變量是否是布爾型
bool is_bool ( mixed $var )
如果 var 是 boolean 則返回 TRUE
<?php
$a = false;
$b = 0;
// 因為 $a 是布爾型,所以結果為真
if (is_bool($a)) {
print "Yes, this is a boolean";
}
// 因為 $b 不是布爾型,所以結果為非真
if (is_bool($b)) {
print "Yes, this is a boolean";
}
?>
整型
PHP整數必須至少有一個數字,不能包含逗號或空格,不能有小數點,正負均可
整型值可以使用十進制,十六進制,八進制或二進制表示,前面可以加上可選的符號(- 或者 +)
二進制表達的 integer 自 PHP 5.4.0 起可用
要使用八進制表達,數字前必須加上 0(零)。要使用十六進制表達,數字前必須加上 0x。要使用二進制表達,數字前必須加上 0b
<?php $a = 1234; // 十進制數 $a = -123; // 負數 $a = 0123; // 八進制數(等於十進制 83) $a = 0x1A; // 十六進制數(等於十進制 26) ?>
整型數的字長和平台有關,盡管通常最大值是大約二十億(32 位有符號)。64位平台下的最大值通常是大約 9E18。PHP不支持無符號整數。Integer 值的字長可以用常量 PHP_INT_SIZE來表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX 來表示
<?php echo PHP_INT_SIZE;//4 echo PHP_INT_MAX;//2147483647 ?>
溢出
如果給定的一個數超出了 integer 的范圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer 范圍,也會返回 float
<?php $large_number = 2147483647; var_dump($large_number); // int(2147483647) $large_number = 2147483648; var_dump($large_number); // float(2147483648) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // float(50000000000) ?>
轉換
要明確地將一個值轉換為 integer,用 (int) 或 (integer) 強制轉換。還可以通過函數 intval() 來將一個值轉換成整型
<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26
echo intval(420000000000000000000); // 0
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
?>
從布爾值轉換,FALSE 將產生出 0,TRUE 將產生出 1;從浮點型轉換,當從浮點數轉換成整數時,將向下取整;從字符串轉換,如果該字符串沒有包含 '.','e' 或 'E' 並且其數字值在整型的范圍之內,該字符串將被當成 integer 來取值。其它所有情況下都被作為float來取值。該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值為0。合法數值由可選的正負號,后面跟着一個或多個數字(可能有小數點),再跟着可選的指數部分。指數部分由'e'或'E'后面跟着一個或多個數字構成
<?php echo (int)true;//1 echo (int)false;//0 echo (int)1.6;//1 echo (int)'1.6px';//1 echo (int)'px';//0 ?>
檢測
is_int()、is_integer()、is_long()這三個函數可以用來檢測變量是否是整數
<?php $a = 1; $b = 1.0; var_dump(is_int($a));//true var_dump(is_int($b));//false var_dump(is_integer($a));//true var_dump(is_integer($b));//false var_dump(is_long($a));//true var_dump(is_long($b));//false ?>
浮點型
浮點型(也叫浮點數 float,雙精度數 double 或實數 real)
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞
以十進制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉換為二進制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...
<?php echo floor((0.1+0.7)*10);//7 ?>
轉換
要明確地將一個值轉換為 float,用(float)強制轉換。還可以通過函數 floatval()、doubleval()來將一個值轉換成整型。除了字符串類型之外,一般地,都是先將值轉換成整型,然后再轉換成浮點數
<?php $var1 = '122.34343The'; $float_value1_of_var1 = floatval ($var1); $float_value1_of_var1 = doubleval ($var1); print $float_value1_of_var1; // 打印出 122.34343 print $float_value1_of_var1; // 打印出 122.34343 $var2 = true; $float_value2_of_var2 = floatval ($var2); $float_value2_of_var2 = doubleval ($var2); print $float_value2_of_var2; // 打印出 1 print $float_value2_of_var2; // 打印出 1 ?>
比較浮點數
比較兩個浮點數是否相等是有問題的。不過還是有迂回的方法來比較浮點數值的
要測試浮點數是否相等,要使用一個僅比該數值大一丁點的最小誤差值。該值也被稱為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差別值
<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
echo "true";
}
?>
NaN
某些數學運算會產生一個由常量 NAN 所代表的結果。此結果代表着一個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值進行的松散或嚴格比較的結果都是 FALSE
由於 NAN 代表着任何不同值,不應拿 NAN 去和其它值進行比較,包括其自身,應該用 is_nan() 來檢查
<?php $nan = acos(8); var_dump($nan, is_nan($nan));//float NAN boolean true ?>
檢測
is_real()、is_float()這兩個函數可以用來檢測變量是否是浮點數
<?php
isfloat("5.0" + 0); // true
isfloat("5.0"); // false
isfloat(5 + 0); // false
isfloat(5.0 + 0); // false
isfloat('a' + 0); // false
?>
字符串
一個字符串string就是由一系列的字符組成,其中每個字符等同於一個字節
一個字符串可以用 4 種方式表達:單引號、雙引號、heredoc語法結構、nowdoc語法結構(自 PHP 5.3.0 起)
單引號
定義一個字符串的最簡單的方法是用單引號把它包圍起來
要表達一個單引號自身,需在它的前面加個反斜線(\)來轉義。要表達一個反斜線自身,則用兩個反斜線(\\)。其它任何方式的反斜線都不會被當成反斜線:也就是說如果想使用其它轉義序列例如 \r 或者 \n,並不代表任何特殊含義,就單純是這兩個字符本身
[注意]在單引號字符串中的變量和特殊字符的轉義序列將不會被替換
<?php echo 'this is a simple string'; // 可以錄入多行 echo 'You can also have embedded newlines in strings this way as it is okay to do'; // 輸出: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"'; // 輸出: You deleted C:\*.*? echo 'You deleted C:\\*.*?'; // 輸出: You deleted C:\*.*? echo 'You deleted C:\*.*?'; // 輸出: This will not expand: \n a newline echo 'This will not expand: \n a newline'; // 輸出: Variables do not $expand $either echo 'Variables do not $expand $either'; ?>
雙引號
如果字符串是包圍在雙引號中, PHP將對一些特殊的字符進行解析。用雙引號定義的字符串最重要的特征是變量會被解析
【轉義字符】
序列 含義
\n 換行(ASCII 字符集中的 LF 或 0x0A (10))
\r 回車(ASCII 字符集中的 CR 或 0x0D (13))
\t 水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\e Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
\f 換頁(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
\\ 反斜線
\$ 美元標記
\" 雙引號
\[0-7]{1,3} 符合該正則表達式序列的是一個以八進制方式來表達的字符
\x[0-9A-Fa-f]{1,2} 符合該正則表達式序列的是一個以十六進制方式來表達的字符
Heredoc結構
第三種表達字符串的方法是用heredoc句法結構(又叫做定界符):<<<。在該運算符之后要提供一個標識符,然后換行。接下來是字符串string 本身,最后要用前面定義的標識符作為結束標志
結束時所引用的標識符必須在該行的第一列,而且,標識符的命名也要像其它標簽一樣遵守 PHP 的規則:只能包含字母、數字和下划線,並且必須以字母和下划線作為開頭
[注意]結束標識符這行除了可能有一個分號外,絕對不能包含其它字符。這意味着標識符不能縮進,分號的前后也不能有任何空白或制表符
<?php $str = <<< G 123 G; echo $str;//123 ?>
Heredoc結構就像是沒有使用雙引號的雙引號字符串,這就是說在heredoc 結構中單引號不用被轉義,但是轉義序列還可以使用。變量將被替換
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
/*My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A*/
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
Nowdoc結構
就像 heredoc 結構類似於雙引號字符串,Nowdoc 結構是類似於單引號字符串的。Nowdoc 結構很像 heredoc 結構,但是 nowdoc 中不進行解析操作。這種結構很適合用於嵌入 PHP 代碼或其它大段文本而無需對其中的特殊字符進行轉義
<?php
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
class foo
{
public $foo;
public $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
/*
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
*/
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;
?>
轉換
一個值可以通過在其前面加上 (string) 或用 strval() 函數來轉變成字符串。在一個需要字符串的表達式中,會自動轉換為string。比如在使用函數echo或print時,或在一個變量和一個 string 進行比較時,就會發生這種轉換
NULL 總是被轉變成空字符串
一個布爾值 boolean 的 TRUE 被轉換成 string 的 "1"。Boolean 的 FALSE 被轉換成 ""(空字符串)。這種轉換可以在 boolean 和 string 之間相互進行
一個整數 integer 或浮點數 float 被轉換為數字的字面樣式的 string(包括 float 中的指數部分)。使用指數計數法的浮點數(4.1E+6)也可轉換
當一個字符串被當作一個數值來取值,其結果和類型如下
如果該字符串沒有包含 '.','e' 或 'E' 並且其數字值在整型的范圍之內(由 PHP_INT_MAX 所定義),該字符串將被當成 integer 來取值。其它所有情況下都被作為 float 來取值
該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值為 0(零)。合法數值由可選的正負號,后面跟着一個或多個數字(可能有小數點),再跟着可選的指數部分。指數部分由 'e' 或 'E' 后面跟着一個或多個數字構成
<?php $foo = 1 + "10.5"; // $foo is float (11.5) $foo = 1 + "-1.3e3"; // $foo is float (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2) $foo = "10.0 pigs " + 1; // $foo is float (11) $foo = "10.0 pigs " + 1.0; // $foo is float (11) ?>
直接把 array,object 或 resource 轉換成 string 不會得到除了其類型之外的任何有用信息
檢測
is_string()函數用來檢測變量是否是字符串
bool is_string ( mixed $var )
如果 var 是 string 則返回 TRUE,否則返回 FALSE
<?php
var_dump(is_string('123'));//boolean true
var_dump(is_string(123));//boolean false
?>
數組
PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型
由於數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的
構建
可以用 array() 語言結構來新建一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對
array( key => value
, ...
)
// 鍵(key)可是是一個整數 integer 或字符串 string
// 值(value)可以是任意類型的值
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自 PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
key可以是integer或者string。value可以是任意類型
此外key會有如下的強制轉換
包含有合法整型值的字符串會被轉換為整型。例如鍵名 "8" 實際會被儲存為 8。但是 "08" 則不會強制轉換,因為其不是一個合法的十進制數值
浮點數也會被轉換為整型,意味着其小數部分會被舍去。例如鍵名 8.7 實際會被儲存為 8
布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0
Null 會被轉換為空字符串,即鍵名 null 實際會被儲存為 ""
數組和對象不能被用為鍵名
如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最后一個,之前的都被覆蓋了
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
/*
array(1) {
[1]=>
string(1) "d"
}
*/
var_dump($array);
?>
key 為可選項。如果未指定,PHP 將自動使用之前用過的最大 integer 鍵名加上 1 作為新的鍵名
<?php
$array = array("foo", "bar", "hallo", "world");
/*
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hallo"
[3]=>
string(5) "world"
}
*/
var_dump($array);
?>
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
/*
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
*/
var_dump($array);
?>
訪問
數組單元可以通過 array[key] 語法來訪問
[注意]數組的中括號[]可以用花括號{}代替
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
/*
string(3) "bar"
int(24)
string(3) "foo"
*/
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
要修改某個值,通過其鍵名給該單元賦一個新值。要刪除某鍵值對,對其調用 unset() 函數
[注意]如果給出方括號但沒有指定鍵名,則取當前最大整數索引值,新的鍵名將是該值加上 1(但是最小為 0)。如果當前還沒有整數索引,則鍵名將為 0
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the script
$arr["x"] = 42; // This adds a new element to
// the array with key "x"
unset($arr[5]); // This removes the element from the array
unset($arr); // This deletes the whole array
?>
刪除
如果將數組中的某個值置為null,則value為空,鍵值仍然存在
<?php $arr = [0,1,2,3]; $arr[1] = null; /* array (size=4) 0 => int 0 1 => null 2 => int 2 3 => int 3 */ var_dump($arr); ?>
如果將數組中的某個值使用unset(),則鍵值對都不存在
<?php $arr = [0,1,2,3]; unset($arr[1]); /* array (size=3) 0 => int 0 2 => int 2 3 => int 3 */ var_dump($arr); ?>
【array_values】
array_values() 函數可以返回數組中所有的值並給其建立數字索引
<?php $arr = [0,1,2,3]; unset($arr[1]); $arr = array_values($arr); /* array (size=3) 0 => int 0 1 => int 2 2 => int 3 */ var_dump($arr); ?>
遍歷
foreach 語法結構提供了遍歷數組的簡單方式。foreach 僅能夠應用於數組和對象,如果嘗試應用於其他數據類型的變量,或者未初始化的變量將發出錯誤信息
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
?>
一般地,可以使用foreach()語句將二維數組遍歷成一個表格的形式
<?php
$group = [
"name"=>"第三組",
"price"=>888,
["name"=>"a", "age"=>20, "sex"=>"男", "email"=>"1@bbb.com"],
["name"=>"b", "age"=>23, "sex"=>"女", "email"=>"2@bbb.com"],
["name"=>"c", "age"=>26, "sex"=>"女", "email"=>"3@bbb.com"],
["name"=>"d", "age"=>31, "sex"=>"女", "email"=>"4@bbb.com"],
["name"=>"e", "age"=>20, "sex"=>"女", "email"=>"5@bbb.com"]
];
echo '<table border="1" width="800" align="center">';
echo '<caption><h1>數組轉為表格<h1></caption>';
foreach($group as $k=>$row) {
echo '<tr>';
if(is_array($row)) {
foreach($row as $col) {
echo '<td>'.$col.'</td>';
}
} else {
echo '<td colspan="4">'.$k.':'.$row.'</td>';
}
echo '</tr>';
}
echo '</table>';
?>
【list()】
list()函數可以將數組中的值賦給變量
list($a,$b,$c) = [1,2,3]; echo $a;//1 echo $b;//2 echo $c;//3 // 僅接收其中一個 list(, , $power) = [1,2,3]; echo $power;//3 // list() 不能對字符串起作用 list($bar) = "abcde"; var_dump($bar); // NULL
【each()】
each()函數用於返回數組中當前的鍵/值對並將數組指針向前移動一步
[注意]如果內部指針越過了數組的末端,則 each() 返回 FALSE
<?php
$foo = array("bob", "fred", "jussi", "jouni");
$bar = each($foo);
//Array ( [1] => bob [value] => bob [0] => 0 [key] => 0 )
print_r($bar);
?>
each()函數常常和list()配合來遍歷數組
<?php
$foo = array("bob", "fred", "jussi", "jouni");
while(list($key,$val) = each($foo)){
//0 => bob 1 => fred 2 => jussi 3 => jouni
echo "$key => $val\n";
}
?>
在執行each() 之后,數組指針將停留在數組中的下一個單元或者當碰到數組結尾時停留在最后一個單元。如果要再用each 遍歷數組,必須使用 reset()
<?php
$foo = array("bob", "fred", "jussi", "jouni");
while(list($key,$val) = each($foo)){
//0 => bob 1 => fred 2 => jussi 3 => jouni
echo "$key => $val\n";
}
reset($foo);
while(list($key,$val) = each($foo)){
//0 => bob 1 => fred 2 => jussi 3 => jouni
echo "$key => $val\n";
}
?>
內部指針
前面提到的reset()函數就是數組內部指針函數的一種,數組內部指針函數包括key()、current()、next()、prev()、end()和reset()
key() 獲取當前下標 current() 獲取當前值 next() 指針向后移動 prev() 指針向左移動 reset() 指針指向數組中第一個元素 end() 指針指向數組中最后一個元素
<?php $arr = ['a','b','c','d']; echo key($arr);//0 echo current($arr);//a echo next($arr);//b echo key($arr);//1 echo current($arr);//b echo end($arr);//d echo key($arr);//3 echo current($arr);//d echo prev($arr);//c echo key($arr);//2 echo current($arr);//c echo reset($arr);//a echo key($arr);//0 echo current($arr);//a ?>
轉換
將 NULL 轉換為 array 會得到一個空的數組
對於任意 integer,float,string,boolean 和 resource 類型,如果將一個值轉換為數組,將得到一個僅有一個元素的數組,其下標為 0,該元素即為此標量的值
如果一個 object 類型轉換為 array,則結果為一個數組,其單元為該對象的屬性。鍵名將為成員變量名,不過有幾點例外:整數屬性不可訪問;私有變量前會加上類名作前綴;保護變量前會加上一個 '*' 做前綴。這些前綴的前后都各有一個 NULL 字符
比較
array_diff()函數用來計算數組的差集
array array_diff ( array $array1 , array $array2 [, array $... ] )
對比返回在 array1 中但是不在 array2 及任何其它參數數組中的值
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
/*
Array
(
[1] => blue
)
*/
print_r($result);
?>
檢測
is_array()函數用來檢測變量是否是數組
<?php
var_dump(is_array([]));//boolean true
var_dump(is_array(''));//boolean false
?>
對象
要創建一個新的對象 object,使用 new 語句實例化一個類
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
轉換
如果將一個對象轉換成對象,它將不會有任何變化。如果其它任何類型的值被轉換成對象,將會創建一個內置類 stdClass 的實例。如果該值為 NULL,則新的實例為空。數組轉換成對象將使鍵名成為屬性名並具有相對應的值。對於任何其它的值,名為 scalar 的成員變量將包含該值
<?php $obj = (object) 'ciao'; echo $obj->scalar; // outputs 'ciao' ?>
檢測
is_object()方法用來檢測變量是否是一個對象
<?php
var_dump(is_object(''));//boolean false
var_dump(is_object((object)''));//boolean true
?>
NULL
PHP中的NULL是空類型,對大小寫不敏感,NULL類型只有一個取值,表示一個變量沒有值,當被賦值為NULL,或者尚未被賦值,或者被unset(),這三種情況下變量被認為為NULL
<?php error_reporting(0); //禁止顯示PHP警告提示 $var; var_dump($var);//NULL $var1 = null; var_dump($var1);//NULL $var2 = NULL; var_dump( $var2);//NULL $var3 = "節日快樂!"; unset($var3); var_dump($var3);//NULL ?>
轉換
使用 (unset) $var 將一個變量轉換為 null 將不會刪除該變量或 unset 其值。僅是返回 NULL 值而已
檢測
is_null()函數用來檢測變量是否為 NULL
<?php
var_dump(is_null(NULL));//boolean true
var_dump(is_null(''));//boolean false
?>
資源
PHP資源是由專門的函數來建立和使用的,例如打開文件、數據連接、圖形畫布。可以對資源進行操作(創建、使用和釋放)。任何資源,在不需要的時候應該被及時釋放。如果我們忘記了釋放資源,系統自動啟用垃圾回收機制,在頁面執行完畢后回收資源,以避免內存被消耗殆盡
<?php
$file=fopen("data/webroot/resource/f.txt","r"); //打開文件
$con=mysql_connect("127.0.0.1","root","root"); //連接數據庫
if ($file_handle){
//接着采用while循環(后面語言結構語句中的循環結構會詳細介紹)一行行地讀取文件,然后輸出每行的文字
while (!feof($file_handle)) { //判斷是否到最后一行
$line = fgets($file_handle); //讀取一行文本
echo $line; //輸出一行文本
echo "<br />"; //換行
}
}
fclose($file_handle);//關閉文件
?>

