PHP基礎4:變量

基本概念

  • 定義
    一個$作為前綴的標識符。
  • 特性
    變量可以存放任意類型的值。在編譯或運行時沒有變量的類型檢查,可以用其他不同類型的值替換一個變量的值。
  • 聲明
    不需要用顯示的語法來聲明變量。變量第一次被賦值時,該變量被創(chuàng)建。設置變量的值也有聲明變量的功能。
  • 未賦值
    變量如果沒有被賦值,則其值為NULL。

變量的變量

  • 定義
    通過$符號作為前綴,引用變量的值作為新變量的名稱。
  • 示例
$foo = "bar";
$$foo = "baz";
則
$baz = "bar";

變量的引用

  • 定義
    引用就是如何創(chuàng)建變量的別名。
$blac =& $white;
  • 解釋
    兩個變量,任意一個值改變,另一個值也隨之改變。
  • 銷毀
    銷毀其中一個變量的值,不影響另一個值。
  • 函數(shù)引用
    函數(shù)可以通過引用返回值(?)
function &retRef()
{
    $var = "PHP";
    return $var;
}
$v =& retRef();

變量的作用域

  • 定義
    變量聲明的位置決定了一個變量的作用域??傆?種類型作用域:局部作用域、全局作用域、靜態(tài)作用域和函數(shù)參數(shù)。
  • 局部作用域
    在一個函數(shù)中聲明。僅在函數(shù)內(nèi)部可見。全局變量不能在函數(shù)內(nèi)部訪問。
  • 全局作用域
    函數(shù)外部聲明,任意部位訪問。函數(shù)內(nèi)部需要先用global關鍵字聲明后,才可訪問。
function updateCounter()
{
    global $counter;
    $counter++;
}
$counter = 10;
updateCounter();
則
$counter = 11;

使用$GLOBALS數(shù)組

function updateCounter()
{
    $GLOBALS[counter]++;
}
$counter = 10;
updateCounter();
echo $counter;
11
  • 靜態(tài)變量
    靜態(tài)變量在一個函數(shù)被多次調(diào)用時,其值不會丟失,但此變量僅在該函數(shù)內(nèi)可見(與全局變量的區(qū)別)。
function updateCounter()
{
    static $counter = 0;
    $counter++;
    echo $counter;
}
$counter = 10;
updateCounter();
updateCounter();
echo $counter;
1
2
10
  • 函數(shù)參數(shù)
    函數(shù)參數(shù)只在函數(shù)內(nèi)部有效。
function greet($name)
{
    echo $name;
}
greet("Janet");
輸出:
Janet

垃圾收集

  • 符號表
    一個變量有兩個部分,它的名字和它的值。符號表是一個將變量名映射到內(nèi)存中變量值所在地址的數(shù)組。
  • 引用計數(shù)
    符號表中的每一個值都有一個引用計數(shù)器,它的數(shù)值表示獲取那片內(nèi)存的方式的數(shù)目。
    當一個變量離開作用域,如函數(shù)參數(shù)和局部變量到達函數(shù)末尾時,它的值的引用計數(shù)減1。當一個變量在其他內(nèi)存空間被賦值時,舊值的引用計數(shù)減1。當引用計數(shù)的值為0時,他的內(nèi)存被釋放。
  • 寫時復制
    當將一個變量的值復制到另一個變量時,PHP沒有為復制值使用更多的內(nèi)存。相反,它會更新符號表來說明這兩個變量擁有相同的內(nèi)存快。如果后臺修改了任意一個副本,PHP將分配所需的內(nèi)存來進行復制。
$worker = array("Fred", 35, "Wilma");
$other = $worker; // 數(shù)組不被復制
$worker[1] = 36; // 值改變,數(shù)組被復制
  • 手動管理內(nèi)存
    如果要查看一個變量是否被設置甚至是空字符串,可使用isset()。
$s1 = isset($name);  // $s1是 false
$name = "Fred";
$s2 = isset($name);  // $s2是true

使用unset()刪除變量的值。

$name = "Fred";
unset($name); //$name 是 NULL
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,194評論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 1 7號床的老孫,穿著病號服端著水杯,慢慢地走到了床前,“哎,總算走了!”他把杯子先放在了床頭柜上。 “誰啊?”9...
    木徒閱讀 236評論 1 3
  • 我還記得,8歲那年。 一個寒冷的冬天,老費下了班,說要帶我去一個神奇的地方。 那里孕育了無數(shù)種生活的可能,存在無數(shù)...
    狒狒小姐本人閱讀 549評論 0 1
  • 「你一生中大部分的精力應該全部只放在一件事情上。把這一件事情做到極致,勝過你把一萬件事做的平庸?!惯@個道理對我整個...
    風墟閱讀 9,976評論 8 41

友情鏈接更多精彩內(nèi)容