2012-05-23

Java 腦袋學 PHP Variables

依照變數的狀態可以區分成 set 與 unset 兩種,set 變數依照值可以再區分成兩類,值為 true 或為 false。
  • set - 有值的變數。
    • true - 可以視為 false 以外的值皆可視為 true,包括字串"00"以及空白字元" "。
    • false - 可以視為 false 的值有 0、0.0、空字串、字元 0、false、空的陣列、無屬性的物件以及 NULL。
  • unset - 無值的變數,被 unset 或者設為 null。

unset
unset($var);

或者

$var = null;
isset
if (isset($var)) {
// $var 存在且值不為 null
}

變數還可以依照 empty 與否做區分:
  • empty - 可以視為  false 的 set 變數,與 unset 變數。
  • non-empty - 可以視為 true 的 st 變數。
empty
if (empty($string) ) { ... }

「==」 與「===」的差異?

「==」只有比值,「===」不只比值,還比型別。
if (0 == 'one' ) { // true }
if (0 == false ) { // true }
if (0 === 'one' ) { // false }
快速交換變數
list($a, $b) = array($b, $a);
動態變數
$a = 'A';
$A = 'apple';
print $$a; // print 'apple'
 $$a 先轉變成 $A,再轉變成 'apple'。
$num = 8;
${'apple_'.$num} 
當內層變數無法直接呈現時,可以用大括弧包住,大括弧裡還可以用 function。

靜態變數
function countNum() {
static $cnt = 0;
$cnt++;
return $cnt;
}
同一個 request 共用同一個靜態變數,但不能跨 request。

倒出變數供偵錯
print_r($var);

或者

var_dump($var);

又或者

var_export($var);
print_r 資訊較簡潔,var_dump 比 print_r 多了型別和長度;這三個 function 預設都是直接吐出資訊,print_r 與 var_export 可以加上第二個參數 true 來得到資訊,而 var_dump 則得用 buffer 方式,var_export 產出的資訊是 PHP Code。
$string = print_r($var, true);

ob_start();
var_dump($var);
$string = ob_get_contents();
ob_end_clean();

沒有留言:

張貼留言