1樓:zjsxwc
global $a;
時會新建乙個指向與外部$a同位址的指標
$GLOBALS['a'] = &$static_a;
時會把外部$a 指標指向 $static_a的內容,拋棄原先的指向
2樓:
多讀讀php手冊,非常多例子
PHP: 變數範圍
PHP: 引用的解釋
PHP: 引用傳遞
PHP: 引用做什麼
變數範圍
變數的範圍即它定義的上下文背景(也就是它的生效範圍)。大部分的
PHP 變數只有乙個單獨的範圍。這個單獨的範圍跨度同樣包含了
include 和 require 引入的檔案。例如:
<?
php$a=1
;include
'b.inc'
;?>
這裡變數 $a 將會在包含檔案
b.inc 中生效。但是,在使用者自定義函式中,乙個區域性函式範圍將被引入。任何用於函式內部的變數按預設情況將被限制在區域性函式範圍內。例如:
<?
php$a=1
;/* global scope */
function
Test
()Test
();?>
這個指令碼不會有任何輸出,因為 echo 語句引用了乙個區域性版本的變數
$a,而且在這個範圍內,它並沒有被賦值。你可能注意到
PHP 的全域性變數和 C 語言有一點點不同,在 C
語言中,全域性變數在函式中自動生效,除非被區域性變數覆蓋。這可能引起一些問題,有些人可能不小心就改變了乙個全域性變數。PHP
中全域性變數在函式中使用時必須宣告為 global。
global 關鍵字
首先,乙個使用 global 的例子:
Example #1 使用 global
<?php
$a = 1;$b = 2;
function Sum()
Sum();
echo $b;?>
以上指令碼的輸出將是「3」。在函式中宣告了全域性變數
$a 和 $b
之後,對任一變數的所有引用都會指向其全域性版本。對於乙個函式能夠宣告的全域性變數的最大個數,PHP 沒有限制。
在全域性範圍內訪問變數的第二個辦法,是用特殊的 PHP 自定義
$GLOBALS 陣列。前面的例子可以寫成:
Example #2 使用 $GLOBALS 替代 global
<?php
$a = 1;
$b = 2;
function
Sum()
Sum();
echo$b;
?>
$GLOBALS
是乙個關聯陣列,每乙個變數為乙個元素,鍵名對應變數名,值對應變數的內容。$GLOBALS
之所以在全域性範圍內存在,是因為 $GLOBALS 是乙個超全域性變數。以下範例顯示了超全域性變數的用處:
Example #3 演示超全域性變數和作用域的例子
<?
phpfunction
test_global
()?>
使用靜態變數
變數範圍的另乙個重要特性是靜態變數(static
variable)。靜態變數僅在區域性函式域中存在,但當程式執行離開此作用域時,其值並不丟失。看看下面的例子:
Example #4 演示需要靜態變數的例子
<?
phpfunction
Test
()?>
本函式沒什麼用處,因為每次呼叫時都會將
$a 的值設為 0 並輸出
0。將變數加一的 $a++
沒有作用,因為一旦退出本函式則變數
$a 就不存在了。要寫乙個不會丟失本次計數值的計數函式,要將變數
$a 定義為靜態的:
Example #5 使用靜態變數的例子
<?php
function test()
?>
現在,變數 $a 僅在第一次呼叫 test() 函式時被初始化,之後每次呼叫 test() 函式都會輸出
$a 的值並加一。
PHP: 賦值運算子
引用賦值
PHP 支援引用賦值,使用「$varamp;$othervar;」語法。引用賦值意味著兩個變數指向了同乙個資料,沒有拷貝任何東西。
Example #1 引用賦值
<?
php$a=3
;$b=&
$a;// $b 是 $a 的引用
"$a\n";
// 輸出 3print "$b\n"; // 輸出 3$a=
4;// 修改 $a
"$a\n";
// 輸出 4print "$b\n"; // 也輸出 4,因為 $b 是 $a 的引用,因此也被改變?>
C 中,async關鍵字到底起什麼作用?
小墨 async 就把他當成乙個非同步的標誌就好啦。就當做和void 一樣。await 等待非同步 但也可以使用xx.result 獲取 await之後的結果。 pokemon 高階篇 以IL為劍,直指async await 布魯克石 CSDN部落格 可以看看這個,async await 是語法糖,...
C 中mutable關鍵字存在的必要性是什麼?
千月 const宣告是告訴使用者此操作不會改變物件狀態,類似於一種保證。當一些變數不屬於物件狀態時,我們應該也要允許它在const函式中發生改變。舉個簡單的例子,我想統計某個物件介面被呼叫的次數,使用者應該不想const函式被排除吧,mutable不就派上用場了。 YiQiuuu 我的理解是,乙個類...
資料結構的排序中為什麼關鍵字會重複?
James Yin 因為查詢可以有多種策略,比如 查全部 字串匹配 findall 第乙個 最後乙個 stl lower bound upper bound 等等。另外,如果排序演算法不允許重複,那對元素可重複的序列要怎麼排序呢?題主說的唯一匹配,沒理解錯的話應該指map類資料結構,比如二叉查詢樹 ...