php作為乙個指令碼的解釋型語言,弱變數的特點和執行完釋放資源的特點諸城,php7的強勢加入更是在後端語言的群雄中掀起了一陣強烈的旋風。好了,由於本人我平時也不怎麼注意變數的作用域,由此寫這篇文章也算是自我提醒。
而php的語法特點和c++也比較像,再加上$_post,$file等全域性變數和__construct()和__destruct()等魔術變數使得開發更顯得方便許多。
但有的人很不習慣php中的變數作用域,php中函式變數和全域性是完全隔絕的,也就是無法相互訪問。
<?php
$test = 'hello,world';
abc(); //這裡什麼都不輸出,因為訪問不到$test變數
function abc()
?>
錯誤資訊
我們可以使用global關鍵字來宣告變數,上面的例子就變成了這樣
$test = 'hello,world';
abc();
function abc()
這就可以了,在全域性範圍內訪問變數的第二個辦法,是用特殊的 php 自定義 $globals 陣列。前面的例子可以寫成:
$test = 'hello,world';
function abc()
abc();
原來以為global和$globals除了寫法不一樣以為,其他都一樣,可是在實際應用中發現,2者的區別還是很大的! 看這個例子:
function test1()
function test2()
$v1 = 1;
$v2 = $v3 = 0;
test1();
echo $v2 ."\n";
test2();
echo $v3 ."\n";
為什麼是這樣:結果
不應該是兩個五嗎?我們在看乙個例子
function test()
$a = 1;
test();
echo $a;
結果
明明是unset了呀,為什麼還會列印出來呢?眾所周知,我們的function裡面的永遠是個私有變數,unset的確是起作用了,它unset了乙個global 的值呀,而global在函式產生乙個指向函式外部變數的別名變數,而不是真正的函式外部變數;$globals確確實實呼叫是外部的變數,函式內外會始終保持一致!
大家對use()的理解是不是還是命名空間的使用,php 命名空間支援有兩種使用別名或匯入方式:為類名稱使用別名,或為命名空間名稱使用別名, 別名通過操作符 use 來實現。但我們今天說的是這種形式:function use(){}
php5.3新增閉包語法,
//普通
$a="hello,world!";
$test = function () use($a);
$test();
//引用物件
$ob=(object)array('name' => 'gbw');
$test2 = function () use($ob);
$test2();
php變數作用域
1 在php中變數主要有 內建超級全域性變數,一般的變數,常量,全域性變數,靜態變數等。內建超級全域性變數 可以在指令碼的任何地方使用和可見。即如果我們在乙個php頁面中改變了其中的乙個值,那麼在其他php頁面中使用時,它的值也會發生改變。常量 一旦被宣告將可以在全域性可見,也就是說,它們可以函式內...
php變數作用域
學過c的人用php的時候一般會相當順手,而且感到php太方便太輕鬆。但在變數作用域這方面卻與 c有不同的地方,搞不好會相當鬱悶,就找不到錯誤所在。昨晚就與到這麼乙個問題,是全域性變數在函式中的問題。今天搜尋了一下,發現一篇相當不錯的文章,講了php中的變數作用域。是一位翻譯的 在這貼一下 變數的範圍...
php變數作用域
先引入官網的一句話 變數的範圍即它定義的上下文背景 也就是它的生效範圍 大部分的 php 變數只有乙個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的檔案。我理解的就是 php變數只有乙個單獨範圍就是指函式內變數的範圍單獨作用於函式內部,函式外部的變數作用域只在函...