一、運(yùn)算符的優(yōu)先級(jí)
遞增/遞減>!>算數(shù)運(yùn)算符>大小比較>(不)相等比較>引用>位運(yùn)算符(^ > | > &)> 三目 > 賦值 > and > or
看一個(gè)例子
$a = false || true;
$b = flase or true;
結(jié)果$a = true,因?yàn)閨|的優(yōu)先級(jí)大于=所以先執(zhí)行(false || true)
$b=false,因?yàn)閛r的優(yōu)先級(jí)最小,先執(zhí)行$b=false
---------------------------------------------------------------------------------
$a = 0;
$b = 0;
if($a=3 > 0 || $b =3 > 0) {
? ? $a++;
? ? $b++;
? ? echo $a.'\n';
? ? echo $b.'\n';
}
結(jié)果$a=1,$b=1;因?yàn)?> 優(yōu)先級(jí)高于 || 高于 =,所以先執(zhí)行3>0所以$a=true,直接執(zhí)行if的代碼塊
PHP除了for和foreach之外,還有一種循環(huán)的方式each() list()?
$array = [
? ? 'a' => 'apple',
? ? 'b' => 'banana',
? ? 'c' => 'carrot',
];
// each提取出當(dāng)前元素的key、value并向前移動(dòng)數(shù)組指針
while(list($key, $value) = each($array)){
? ? var_dump($key,$value);
? ? echo "
";
}
foreach與while-list-each的區(qū)別是,foreach遍歷前會(huì)reset數(shù)組指針,而while-list-each則不會(huì)。
局部變量是無法使用全局變量的
// 全局變量
$outer = 'str';
function myfunc(){
? ? echo $outer; ->會(huì)報(bào)錯(cuò)
}
//如果要在局部使用全局變量需要用global關(guān)鍵字:
function myfunc(){
? ? global $outer; // $GLOBALS['outer'];也可以
? ? echo $outer; //str
}
靜態(tài)變量
1.靜態(tài)變量僅初始化一次,并且初始化的時(shí)候需要賦值
2.每次執(zhí)行函數(shù)都會(huì)保留該值
3.static是局部的變量,僅在函數(shù)內(nèi)部有效
4.在遞歸的時(shí)候可以用來記錄函數(shù)的調(diào)用次數(shù),從而作為終止遞歸的條件
$count = 5;
function echo_count(){
? ? static? $count;
? ? return $count++;
}
echo $count; //5
echo "
";
++$count;
echo echo_count(); // null 沒有給局部變量$count初始化
echo "
";
echo echo_count(); // 1? ? null + 1 =1
函數(shù)的引用返回:
從函數(shù)返回一個(gè)引用,必須在函數(shù)聲明和指派返回值給一個(gè)變量都使用&
function &myFunc(){
? ? static $b = 10;
? ? return $b;
}
$a = myFunc();? -> $a=10;
$a = &myFunc(); -> $a和$b互為引用
$a = 100; -> $a修改同時(shí)也修改了$b
echo myFunc(); // 輸出100
外部文件的導(dǎo)入
require/include語句包含并運(yùn)行指定的文件,如果給出路徑名就會(huì)從路徑名中查找,否則從include_path(環(huán)境變量)中查找,如果include_path也沒有,則從調(diào)用腳本所在目錄和當(dāng)前工作目錄下查找。當(dāng)一個(gè)文件被包含的時(shí)候,其中所包含的代碼繼承了include所在行的變量范圍。
加載過程中如果沒有找到文件,require會(huì)發(fā)出一個(gè)致命錯(cuò)誤(E_COMPILE_ERROR)腳本終止;include(E_WARNING)產(chǎn)生一個(gè)警告,程序會(huì)繼續(xù)運(yùn)行
總結(jié):
$var1 = 5;
$var2 = 10;
function foo(&$my_var){
? ? global $var1;
? ? $var1 += 2;
? ? $var2 = 4;
? ? $my_var += 3;
? ? return $var2;
}
$my_var = 5;
echo foo($my_var). "\r\n"; //4 局部變量$var2
echo $my_var. "\r\n"; // 8? 引用傳遞改變值
echo $var1; // 7? ? // 全局變量 $var1在局部函數(shù)里面+2
echo $var2; // 10? // 全局變量$var2 并未修改過
$bar = 'foo';
$my_var = 10;
echo $bar($my_var). "\n"; // 4 還是輸出局部變量$var2