PHP基礎(chǔ)之變量1——基礎(chǔ)簡介
PHP 中的變量用一個美元符號后面跟變量名來表示。變量名是區(qū)分大小寫的。
變量名與 PHP 中其它的標(biāo)簽一樣遵循相同的規(guī)則。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數(shù)量的字母,數(shù)字,或者下劃線。按照正常的正則表達(dá)式,它將被表述為:’[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*’。
Note: 在此所說的字母是 a-z,A-Z,以及 ASCII 字符從 127 到 255(0x7f-0xff)。
Note: $this 是一個特殊的變量,它不能被賦值。
<?php
$var = ’Bob’;
$Var = ’Joe’;
echo '$var, $Var'; ?????// 輸出 'Bob, Joe'
$4site = ’not yet’; ????// 非法變量名;以數(shù)字開頭
$_4site = ’not yet’; ???// 合法變量名;以下劃線開頭
$i站點(diǎn)is = ’mansikka’; ?// 合法變量名;可以用中文
?>
變量默認(rèn)總是傳值賦值。那也就是說,當(dāng)將一個表達(dá)式的值賦予一個變量時,整個原始表達(dá)式的值被賦值到目標(biāo)變量。這意味著,例如,當(dāng)一個變量的值賦予另外一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。
PHP 也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動新的變量將影響到原始變量,反之亦然。
使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。例如,下列代碼片斷將輸出“My name is Bob”兩次:
<?php
$foo = ’Bob’; ?????????????// 將 ’Bob’ 賦給 $foo
$bar = &$foo; ?????????????// 通過 $bar 引用 $foo
$bar = 'My name is $bar'; ?// 修改 $bar 變量
echo $bar;
echo $foo; ????????????????// $foo 的值也被修改
?>
有一點(diǎn)重要事項(xiàng)必須指出,那就是只有有名字的變量才可以引用賦值。
<?php
$foo = 25;
$bar = &$foo; ?????// 合法的賦值
$bar = &(24 * 7); ?// 非法; 引用沒有名字的表達(dá)式
function test()
{
??return 25;
}
$bar = &test(); ???// 非法
?>
雖然在 PHP 中并不需要初始化變量,但對變量進(jìn)行初始化是個好習(xí)慣。未初始化的變量具有其類型的默認(rèn)值 - 布爾類型的變量默認(rèn)值是 FALSE,整形和浮點(diǎn)型變量默認(rèn)值是零,字符串型變量(例如用于 echo 中)默認(rèn)值是空字符串以及數(shù)組變量的默認(rèn)值是空數(shù)組。
Example #1 未初始化變量的默認(rèn)值
<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);
// Boolean usage; outputs ’false’ (See ternary operators for more on this syntax)
echo($unset_bool ? 'truen' : 'falsen');
// String usage; outputs ’string(3) 'abc'’
$unset_str .= ’abc’;
var_dump($unset_str);
// Integer usage; outputs ’int(25)’
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);
// Float/double usage; outputs ’float(1.25)’
$unset_float += 1.25;
var_dump($unset_float);
// Array usage; outputs array(1) { ?[3]=> ?string(3) 'def' }
$unset_arr[3] = 'def'; // array() + array(3 => 'def') => array(3 => 'def')
var_dump($unset_arr);
// Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php)
// Outputs: object(stdClass)#1 (1) { ?['foo']=> ?string(3) 'bar' }
$unset_obj->foo = ’bar’;
var_dump($unset_obj);
?>
依賴未初始化變量的默認(rèn)值在某些情況下會有問題,例如把一個文件包含到另一個之中時碰上相同的變量名。另外把 register_globals 打開是一個主要的安全隱患。使用未初始化的變量會發(fā)出E_NOTICE 錯誤,但是在向一個未初始化的數(shù)組附加單元時不會。 isset() 語言結(jié)構(gòu)可以用來檢測一個變量是否已被初始化。
相關(guān)文章:
1. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程2. jsp實(shí)現(xiàn)登錄驗(yàn)證的過濾器3. 如何在jsp界面中插入圖片4. ASP動態(tài)網(wǎng)頁制作技術(shù)經(jīng)驗(yàn)分享5. 詳解瀏覽器的緩存機(jī)制6. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法7. Xml簡介_動力節(jié)點(diǎn)Java學(xué)院整理8. phpstudy apache開啟ssi使用詳解9. jsp文件下載功能實(shí)現(xiàn)代碼10. JSP之表單提交get和post的區(qū)別詳解及實(shí)例
