亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

淺析php變量作用域的一些問題

2020-03-22 19:12:36
字體:
來源:轉載
供稿:網友
昨晚就與到這么一個問題,是html' target='_blank'>全局變量函數中的問題。今天搜索了一下,發現一篇相當不錯的文章,講了php中的變量作用域。是一位網友翻譯的在這貼一下:變量范圍
變量的范圍即它定義的上下文背景(譯者:說白了,也就是它的生效范圍)。大部分的 PHP 變量只有一個單獨的范圍。這個單獨的范圍跨度同樣包含了 include 和 require 引入的文件。范例:
復制代碼 代碼如下:
?php
$a = 1;
include "b.inc";
?

這里變量 $a 將會在包含文件 b.inc 中生效。但是,在用戶自定義函數中,一個局部函數范圍將被引入。任何用于函數內部的變量按缺省情況將被限制在局部函數范圍內。范例:
復制代碼 代碼如下:
?php
$a = 1; /* global scope */function Test()
{
echo $a; /* reference to local scope variable */
}Test();
?

這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變量 $a,而且在這個范圍內,它并沒有被賦值。你可能注意到 PHP 的全局變量和 C 語言有一點點不同,在 C 語言中,全局變量在函數中自動生效,除非被局部變量覆蓋。這可能引起一些問題,有些人可能漫不經心的改變一個全局變量。PHP 中全局變量在函數中使用時必須申明為全局。

The global keyword
首先,一個使用 global 的例子:
例子 12-1. 使用 global
復制代碼 代碼如下:
?php
$a = 1;
$b = 2;function Sum()
{
global $a, $b; $b = $a + $b;
}Sum();
echo $b;
?

以上腳本的輸出將是 "3"。在函數中申明了全局變量 $a 和 $b,任何變量的所有引用變量都會指向到全局變量。對于一個函數能夠申明的全局變量的最大個數,PHP 沒有限制。在全局范圍內訪問變量的第二個辦法,是用特殊的 PHP 自定義 $GLOBALS 數組。前面的例子可以寫成:例子 12-2. 使用 $GLOBALS 替代 global
復制代碼 代碼如下:
?php
$a = 1;
$b = 2;function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}Sum();
echo $b;
?

在 $GLOBALS 數組中,每一個變量為一個元素,鍵名對應變量名,值變量的內容。$GLOBALS 之所以在全局范圍內存在,是因為 $GLOBALS 是一個超全局變量。以下范例顯示了超全局變量的用處:例子 12-3. 演示超全局變量和作用域的例子
復制代碼 代碼如下:
?php
function test_global()
{
// 大多數的預定義變量并不 "super",它們需要用 'global' 關鍵字來使它們在函數的本地區域中有效。
global $HTTP_POST_VARS; print $HTTP_POST_VARS['name']; // Superglobals 在任何范圍內都有效,它們并不需要 'global' 聲明。Superglobals 是在 PHP 4.1.0 引入的。
print $_POST['name'];
}
?

使用靜態變量
變量范圍的另一個重要特性是靜態變量(static variable)。靜態變量僅在局部函數域中存在,但當程序執行離開此作用域時,其值并不丟失??纯聪旅娴睦樱豪?12-4. 演示需要靜態變量的例子
復制代碼 代碼如下:
?php
function Test ()
{
$a = 0;
echo $a;
$a++;
}
?

本函數沒什么用處,因為每次調用時都會將 $a 的值設為 0 并輸出 "0"。將變量加一的 $a++ 沒有作用,因為一旦退出本函數則變量 $a 就不存在了。要寫一個不會丟失本次計數值的計數函數,要將變量 $a 定義為靜態的:例子 12-5. 使用靜態變量的例子
復制代碼 代碼如下:
?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
?

現在,每次調用 Test() 函數都會輸出 $a 的值并加一。靜態變量也提供了一種處理遞歸函數的方法。遞歸函數是一種調用自己的函數。寫遞歸函數時要小心,因為可能會無窮遞歸下去。必須確保有充分的方法來中止遞歸。一下這個簡單的函數遞歸計數到 10,使用靜態變量 $count 來判斷何時停止:例子 12-6. 靜態變量與遞歸函數
復制代碼 代碼如下:
?php
function Test()
{
static $count = 0; $count++;
echo $count;
if ($count 10) {
Test ();
}
$count--;
}
?

注: 靜態變量可以按照上面的例子聲明。如果在聲明中用表達式的結果對其賦值會導致解析錯誤。例子 12-7. 聲明靜態變量
復制代碼 代碼如下:
?php
function foo(){
static $int = 0; // correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too) $int++;
echo $int;
}
?

全局和靜態變量的引用
在 Zend 引擎 1 代,驅動了 PHP4,對于變量的 static 和 global 定義是以 references 的方式實現的。例如,在一個函數域內部用 global 語句導入的一個真正的全局變量實際上是建立了一個到全局變量的引用。這有可能導致預料之外的行為,如以下例子所演示的:

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久91香蕉国产| 久久精品美女视频网站| 色综合久久久久久中文网| 亚洲国产黄色片| 8090理伦午夜在线电影| 亚洲网站视频福利| 国产成人精品综合久久久| 日本亚洲精品在线观看| 超碰91人人草人人干| 欧美性xxxx极品hd满灌| 午夜精品蜜臀一区二区三区免费| 伊人成人开心激情综合网| 亚州av一区二区| 国产精品欧美日韩| 欧美日韩亚洲91| 亚洲国产精品系列| 成人在线免费观看视视频| 久久久国产在线视频| 亚洲日本aⅴ片在线观看香蕉| 亚洲第一网站免费视频| 亚洲情综合五月天| 一区二区三区国产在线观看| 97免费视频在线| 国产日韩欧美另类| 国产精品高潮粉嫩av| 国产精品免费视频xxxx| 国产精品久久久久久久久久尿| 91精品视频免费观看| 美女啪啪无遮挡免费久久网站| 美女久久久久久久久久久| 久久天天躁狠狠躁夜夜av| 日韩av在线直播| 日韩精品在线免费| 久久国产天堂福利天堂| 中文字幕成人精品久久不卡| 国产精品久在线观看| 亚洲人成人99网站| 97视频在线观看免费| 成人在线中文字幕| 久久精品国产亚洲精品2020| 日产精品久久久一区二区福利| 国产97色在线|日韩| 性欧美办公室18xxxxhd| 国产精品丝袜久久久久久高清| 九色91av视频| 日韩大陆欧美高清视频区| 日韩av不卡电影| 亚洲欧美一区二区三区在线| 欧美黑人又粗大| 国产精品福利无圣光在线一区| 精品视频久久久久久久| 狠狠躁夜夜躁人人躁婷婷91| 第一福利永久视频精品| 亚洲美女av网站| 精品久久久久久亚洲精品| 亚洲老板91色精品久久| 日韩av日韩在线观看| 亚洲综合自拍一区| 欧美视频在线免费看| 国产香蕉97碰碰久久人人| 久久精品最新地址| 国产噜噜噜噜噜久久久久久久久| 欧美电影免费观看大全| 成人黄色短视频在线观看| 亚洲欧美第一页| 日韩高清有码在线| 国产精品自产拍在线观| 国产精品美女av| 最新国产精品拍自在线播放| 91久久嫩草影院一区二区| 91av在线免费观看| 97超级碰碰碰| 久久久精品久久久久| 3344国产精品免费看| 亚洲自拍偷拍视频| 中文字幕欧美日韩| xxx成人少妇69| 亚洲国产高清福利视频| 97在线看免费观看视频在线观看| 中文字幕久久精品| 欧美成人免费视频| 国产日韩欧美在线播放| 久久九九全国免费精品观看| 精品中文字幕视频| 亚洲永久免费观看| 国产精品综合网站| 亚洲精品国产电影| 成人黄色影片在线| 久久久久久久影院| 操91在线视频| 中文字幕欧美精品日韩中文字幕| 91精品国产综合久久久久久蜜臀| 国产精品久久久久久久9999| 国产精品69精品一区二区三区| 久久久久久久久久久成人| 日韩av在线网址| 91精品视频免费观看| 国产精品久久久久久久天堂| 成人免费观看49www在线观看| 日韩欧美视频一区二区三区| 欧美日韩国产va另类| 欧美最顶级的aⅴ艳星| 91在线精品视频| 91免费看视频.| 欧美在线观看视频| 日韩美女视频中文字幕| 国产美女久久精品香蕉69| 亚洲电影第1页| 国产中文欧美精品| 欧美一级在线播放| 亚洲性69xxxbbb| 国产成人精品久久| 国产精品成人av在线| 成人激情黄色网| 日韩欧美极品在线观看| 久久精品中文字幕免费mv| 亚洲欧美日本伦理| 成人免费自拍视频| 国产日韩一区在线| 亚洲日本欧美日韩高观看| 久久成人亚洲精品| 亚洲欧美色婷婷| 欧美理论电影在线播放| 亚洲精品视频在线观看视频| 色综合久久中文字幕综合网小说| 狠狠躁夜夜躁人人躁婷婷91| 亚洲一级黄色av| 亚洲视频免费一区| 在线视频亚洲欧美| 国产精品成人va在线观看| 欧美成人精品一区二区三区| 在线视频免费一区二区| 亚洲激情自拍图| 精品亚洲永久免费精品| 日韩av不卡在线| 国产视频久久久久久久| 日韩av电影在线免费播放| 狠狠久久五月精品中文字幕| 精品国产一区二区三区久久久狼| 亚洲欧美日本伦理| 日韩av在线网址| 国产日韩在线一区| 中文字幕欧美精品在线| 欧美大胆a视频| 中文字幕免费精品一区高清| 亚洲va码欧洲m码| 日韩在线www| 日韩欧美a级成人黄色| 欧美日本在线视频中文字字幕| 国产精品日韩久久久久| 1769国内精品视频在线播放| 97国产一区二区精品久久呦| 亚洲美女av在线播放| 一区二区三区视频免费在线观看| 国内精品久久影院| 亚洲精品美女视频| 国内精品伊人久久| 精品福利免费观看| 国产精品久久77777| 国内精品久久久久| 国产区精品视频| 成人免费网站在线| 亚洲视频777| 中文字幕亚洲二区|