[PHP 手冊] – 變數(基礎)

[PHP 手冊] – 變數(基礎)

[PHP 手冊] – 變數(基礎)

 

資料來源: http://www.ithome.com/html/soft/72723.htm

code2html:http://tohtml.com/

 

PHP 中的變數用一個美元符號後面跟變數名來表示。變數名是區分大小寫的。

 

變數名與 PHP 中其他的標籤一樣遵循相同的規則。一個有效的變數名由字母或者下劃線開頭,後面跟上任意數量的字母,數位,或者下劃線。按照正常的正則運算式,它將被表述為:’[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*‘。

 

<?php
$var 
‘Bob’;
$Var ‘Joe’;
echo 
$var$Var;      // 輸出 “Bob, Joe”

$4site ‘not yet’;     // 非法變數名;以數字開頭
$_4site ‘not yet’;    // 合法變數名;以下劃線開頭
$i站點is ‘mansikka’;  // 合法變數名;可以用中文
?>

 

變數默認總是傳值賦值。那也就是說,當將一個運算式的值賦予一個變數時,整個原始運算式的值被賦值到目標變數。這意味著,例如,當一個變數的值賦予另外一個變數時,改變其中一個變數的值,將不會影響到另外一個變數。有關這種類型的賦值操作,請參閱運算式一章。

 

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 的值也被修改
?>

 

有一點重要事項必須指出,那就是只有有名字的變數才可以引用賦值。

 

<?php
$foo 
25;
$bar = &$foo;      // 合法的賦值
$bar = &(24 7);  // 非法; 引用沒有名字的運算式

function test()
{
   return 
25;
}

$bar = &test();    // 非法
?>

 

雖然在 PHP 中並不需要初始化變數,但對變數進行初始化是個好習慣。未初始化的變數具有其類型的預設值 – 布林類型的變數預設值是 FALSE,整形和浮點型變數預設值是零,字串型變數(例如用於 echo 中)預設值是空字串以及陣列變數的預設值是空陣列。

 

Example #1 未初始化變數的預設值

 

<?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 “true\n” “false\n”);

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

 

依賴未初始化變數的預設值在某些情況下會有問題,例如把一個檔包含到另一個之中時碰上相同的變數名。另外把 register_globals 打開是一個主要的安全隱患。使用未初始化的變數會發出 E_NOTICE 錯誤,但是在向一個未初始化的陣列附加單元時不會。isset() 語言結構可以用來檢測一個變數是否已被初始化。

 

 

 

 

 


發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *