国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 php手冊(cè) PHP Global與$GLOBALS變量作用域與區(qū)別

PHP Global與$GLOBALS變量作用域與區(qū)別

May 25, 2016 pm 04:48 PM
global 變數(shù)

在php中變量有很多種如普通的變量及全局變量(Global與$GLOBALS),本文章來(lái)給大家介紹在php中Global與$GLOBALS的用法區(qū)別.

Global,全局變量

PHP Global變量在實(shí)際應(yīng)用中會(huì)發(fā)現(xiàn)許多問題需要我們不斷的去完善處理.我們?cè)谶@篇文章中就針對(duì)PHP Global變量出現(xiàn)的問題給出了一些具體的解決辦法,PHP hack的使用技巧詳解,代碼實(shí)現(xiàn)PHP GTK寫文本查看器,網(wǎng)站開發(fā)中PHP語(yǔ)言優(yōu)缺點(diǎn).

如何正確實(shí)現(xiàn)PHP function函數(shù)擴(kuò)展

PHP error_log()函數(shù)處理錯(cuò)誤日志

1:PHP Global變量的作用是定義全局變量,但是這個(gè)全局變量不是應(yīng)用于整個(gè)網(wǎng)站,而是應(yīng)用于當(dāng)前頁(yè)面,包括include或require的所有文件

實(shí)例代碼如下:

$a=123;
function aa()  
{  
    Global $a;   
    //如果不把$a定義為global變量,函數(shù)體內(nèi)是不能訪問$a的  
    echo $a;  
}  
aa();

總結(jié):

在函數(shù)體內(nèi)定義的PHP Global變量,函數(shù)體外可以使用,在函數(shù)體外定義的global變量不能在函數(shù)體內(nèi)使用,

實(shí)例代碼如下:

$glpbal $a;   
$a=123;    
function f()   
{   
    echo $a; //錯(cuò)誤,   
}

再看看下面一例,實(shí)例代碼如下:

function f()   
{   
    global $a;  $a=123;   
}    
f();   
echo $a;
//正確,可以使用

2:PHP Global變量問題解析:

question:我在config.inc.php中定義了一些變量($a),在別的文件中函數(shù)外部 include("config.inc.php"),函數(shù)內(nèi)部需要使用這些變量$a,如果沒有聲明的話,echo $a是打印不出來(lái)任何東西的.因此聲明global $a,但是有很多函數(shù)和很多變量.總不能不斷重復(fù)的這樣聲明吧?有什么好的解決辦法,請(qǐng)指點(diǎn).

answer1:先在config.inc.php里定義常量:define(常量名,常量值),再在其他需要用到的地方require 'config.inc.php',然后就能在這個(gè)文件里直接使用這個(gè)常量了.

answer2:我也有個(gè)辦法,就是定義數(shù)組,如$x[a],$x,那樣就只要聲明global $x一個(gè)了.

answer3:我試了你的這個(gè)方法,不行啊.

answer4:改你的php.ini文件.

設(shè)置PHP Global變量 為 on,下面我們看看復(fù)雜點(diǎn)的:

實(shí)例代碼如下:

//A.php 文件
<?php
function Test_Global() {
    include &#39;B.php&#39;;
    Test();
}
$a = 0;
Test_Global();
echo $a;
?>
//B.php 文件 
<?php
function Test() {
    global $a; //申明函數(shù)體Sum內(nèi)使用的$a變量為global全局變量
    $a = 1;
}
?>

為什么輸出的卻是0?!!

在用戶自定義函數(shù)中,一個(gè)局部函數(shù)范圍將被引入.任何用于函數(shù)內(nèi)部的變量按缺省情況將被限制在局部函數(shù)范圍內(nèi)(包括include 和 require 導(dǎo)入的文件內(nèi)的變量)!

解釋:A.php文件的內(nèi)Test_Global是定義好的第三方函數(shù),該函數(shù)用include導(dǎo)入了B.php文件內(nèi)的$a的global全局變量,所以$a被限制在Test_Global局部函數(shù)范圍內(nèi),所以B.php文件內(nèi)的$a的作用范圍都在Test_Global內(nèi),而不是作用了整個(gè)A.php內(nèi)….

解決方案:

1. 沖出局部函數(shù)實(shí)例代碼如下:

//A.php 文件 
<?php
function Test_Global() {
    Test();
}
include &#39;B.php&#39;; //將include 從局部Test_Global函數(shù)中移出
$a = 0;
Test_Global();
echo $a;
?>
//B.php 文件 
<?php
function Test() {
    global $a;
    $a = 1;
}
?>

global和$GLOBALS的區(qū)別

php中g(shù)lobal和$GLOBALS不僅僅是寫法不一樣以為,2者的區(qū)別還是很大的,在實(shí)際應(yīng)用中需要注意!

先看下面的實(shí)例代碼:

<?php
// 例子1
function test_global() {
    global $var1, $var2;
    $var2 = & $var1;
}
function test_globals() {
    $GLOBALS[&#39;var3&#39;] = & $GLOBALS[&#39;var1&#39;];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 . "\n";
test_globals();
print $var3 . "\n";
?>

執(zhí)行結(jié)果為:0 5

怎么會(huì)這樣呢?不應(yīng)該是2個(gè)5嗎?怎么會(huì)出現(xiàn)1個(gè)0和1個(gè)5呢?

恩,我們保留以上問題,深入分析$GLOBALS和global的原理!我們都知道變量其實(shí)是相應(yīng)物理內(nèi)存在代碼中的"代號(hào)"而已引用php手冊(cè)的$GLOBALS的解釋:

Global 變量:$GLOBALS,注意: $GLOBALS 在 PHP 3.0.0 及以后版本中適用.由所有已定義全局變量組成的數(shù)組.變量名就是該數(shù)組的索引.這是一個(gè)"superglobal",或者可以描述為自動(dòng)全局變量.也就是說上面代碼中的$var1和$GLOBALS['var1']是指的同一變量,而不是2個(gè)不同的變量!下面來(lái)分析global到底做了什么?

引用php手冊(cè)的global的解釋:

如果在一個(gè)函數(shù)內(nèi)部給一個(gè)聲明為 global 的變量賦于一個(gè)引用,該引用只在函數(shù)內(nèi)部可見.可以通過使用 $GLOBALS 數(shù)組避免這一點(diǎn).我們都知道php中的函數(shù)所產(chǎn)生的變量都是函數(shù)的私有變量,那么global關(guān)鍵字產(chǎn)生的變量也肯定逃不出這個(gè)規(guī)則,為什么這么說呢,

請(qǐng)看下面的代碼:

<?php
// 例子2
function test() {
    global $a;
    unset($a);
}
$a = 1;
test();
print $a;
?>

執(zhí)行結(jié)果為:1

為什么會(huì)輸出1呢?不是已經(jīng)把$a給unset了嗎?unset失靈了?php的bug?

都不是,其實(shí)unset起作用了,是把test函數(shù)中的$a給unset掉了,可以在函數(shù)test()中加入print $a;來(lái)測(cè)試!

接著回到上面的例子1,看test_global中的這一代碼"$var2 = &$var1;",上面是一個(gè)引用賦值運(yùn)算,也就是$var2將指向var1所指向的物理內(nèi)存地址,所以例子1執(zhí)行過test_global函數(shù)以后,變量的變化只在函數(shù)的局部產(chǎn)生效應(yīng),在函數(shù)外部$var2的指向物理內(nèi)存地址并沒有變化,還是它自己.此時(shí),就能理解為什么例子1執(zhí)行完以后,$var2是0,而$var3是5了!

所以我們得出一個(gè)結(jié)論,在函數(shù)中g(shù)lobal和$GLOBALS[]的區(qū)別在于:

global在函數(shù)產(chǎn)生一個(gè)指向函數(shù)外部變量的別名變量,而不是真正的函數(shù)外部變量,一但改變了別名變量的指向地址,就會(huì)發(fā)生一些意料不到情況,例如例子1.

$GLOBALS[]確確實(shí)實(shí)調(diào)用是外部的變量,函數(shù)內(nèi)外會(huì)始終保持一致,可以對(duì)照下面兩個(gè)列子再加深下印象:

global:

實(shí)例代碼如下:

<?php
function myfunction() {
    global $bar;
    unset($bar);
}
$bar = "someting";
myfunction();
echo $bar;
?>

輸出:someting

$GLOBALS[]:

<?php
function foo() {
    unset($GLOBALS[&#39;bar&#39;]);
}
$bar = "something";
foo();
echo $bar;
?>

輸出:空

當(dāng)按照上面的思路理解后,碰到下面的情況是不是又有些暈?zāi)?

實(shí)例代碼如下:

<?php
$a = 1;
$b = 2;
function Sum() {
    global $a, $b;
    $b = $a + $b;
}
Sum();
echo $b;
?>

輸出將是 "3".在函數(shù)中申明了全局變量 $a 和 $b,任何變量的所有引用變量都會(huì)指向到全局變量.

怎么不是2呢,在函數(shù)外部不是不影響嗎,請(qǐng)注意$b在函數(shù)中并沒有通過引用修改,而是修改的$b指向物理內(nèi)存的值,因此外部輸入為3.

php中g(shù)lobal和$GLOBALS不僅僅是寫法不一樣以為,2者的區(qū)別還是很大的,在實(shí)際應(yīng)用中需要注意!

先看下面的PHP代碼例子:

<?php
// 例子1
function test_global() {
    global $var1, $var2;
    $var2 = & $var1;
}
function test_globals() {
    $GLOBALS[&#39;var3&#39;] = & $GLOBALS[&#39;var1&#39;];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 . "\n";
test_globals();
print $var3 . "\n";
?>

執(zhí)行結(jié)果為:0 5

怎么會(huì)這樣呢?不應(yīng)該是2個(gè)5嗎?怎么會(huì)出現(xiàn)1個(gè)0和1個(gè)5呢?

恩,我們保留以上問題,深入分析$GLOBALS和global的原理!我們都知道變量其實(shí)是相應(yīng)物理內(nèi)存在代碼中的"代號(hào)"而已,引用php手冊(cè)的$GLOBALS的解釋:

Global 變量:$GLOBALS,注意: $GLOBALS 在 PHP 3.0.0 及以后版本中適用.

由所有已定義全局變量組成的數(shù)組.變量名就是該數(shù)組的索引.這是一個(gè)"superglobal",或者可以描述為自動(dòng)全局變量.也就是說上面代碼中的$var1和$GLOBALS['var1']是指的同一變量,而不是2個(gè)不同的變量!

下面來(lái)分析global到底做了什么?

引用php手冊(cè)的global的解釋:

如果在一個(gè)函數(shù)內(nèi)部給一個(gè)聲明為 global 的變量賦于一個(gè)引用,該引用只在函數(shù)內(nèi)部可見.可以通過使用 $GLOBALS 數(shù)組避免這一點(diǎn).我們都知道php中的函數(shù)所產(chǎn)生的變量都是函數(shù)的私有變量,那么global關(guān)鍵字產(chǎn)生的變量也肯定逃不出這個(gè)規(guī)則,為什么這么說呢,看下面的代碼:

實(shí)例代碼如下:

<?php
// 例子2
function test() {
    global $a;
    unset($a);
}
$a = 1;
test();
print $a;
?>

執(zhí)行結(jié)果為:1

為什么會(huì)輸出1呢?不是已經(jīng)把$a給unset了嗎?unset失靈了?php的bug?

都不是,其實(shí)unset起作用了,是把test函數(shù)中的$a給unset掉了,可以在函數(shù)test()中加入print $a;來(lái)測(cè)試!

接著回到上面的例子1,看test_global中的這一代碼"$var2 =& $var1;",上面是一個(gè)引用賦值運(yùn)算,也就是$var2將指向var1所指向的物理內(nèi)存地址,所以例子1執(zhí)行過test_global函數(shù)以后,變量的變化只在函數(shù)的局部產(chǎn)生效應(yīng),在函數(shù)外部$var2的指向物理內(nèi)存地址并沒有變化,還是它自己.

此時(shí),就能理解為什么例子1執(zhí)行完以后,$var2是0,而$var3是5了!

所以我們得出一個(gè)結(jié)論,在函數(shù)中g(shù)lobal和$GLOBALS[]的區(qū)別在于:

global在函數(shù)產(chǎn)生一個(gè)指向函數(shù)外部變量的別名變量,而不是真正的函數(shù)外部變量,一但改變了別名變量的指向地址,就會(huì)發(fā)生一些意料不到情況,例如例子1.

$GLOBALS[]確確實(shí)實(shí)調(diào)用是外部的變量,函數(shù)內(nèi)外會(huì)始終保持一致,可以對(duì)照下面兩個(gè)列子再加深下印象:

global:

實(shí)例代碼如下:

<?php
function myfunction() {
    global $bar;
    unset($bar);
}
$bar = "someting";
myfunction();
echo $bar;
?>

輸出:someting

實(shí)例代碼如下:

$GLOBALS[]:

<?php
function foo() {
    unset($GLOBALS[&#39;bar&#39;]);
}
$bar = "something";
foo();
echo $bar;
?>

輸出:空

當(dāng)按照上面的思路理解后,碰到下面的情況是不是又有些暈?zāi)?

實(shí)例代碼如下:

<?php
$a = 1;
$b = 2;
function Sum() {
    global $a, $b;
    $b = $a + $b;
}
Sum();
echo $b;
?>

輸出將是 "3".在函數(shù)中申明了全局變量 $a 和 $b,任何變量的所有引用變量都會(huì)指向到全局變量.

怎么不是2呢,在函數(shù)外部不是不影響嗎,請(qǐng)注意$b在函數(shù)中并沒有通過引用修改,而是修改的$b指向物理內(nèi)存的值,因此外部輸入為3


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
使用Windows 11和10環(huán)境變數(shù)進(jìn)行設(shè)定檔操作指南 使用Windows 11和10環(huán)境變數(shù)進(jìn)行設(shè)定檔操作指南 Nov 01, 2023 pm 08:13 PM

環(huán)境變數(shù)是運(yùn)行應(yīng)用程式和程式的位置路徑(或環(huán)境)。它們可以由使用者建立、編輯、管理或刪除,並在管理某些進(jìn)程的行為時(shí)派上用場(chǎng)。以下介紹如何建立設(shè)定檔以同時(shí)管理多個(gè)變量,而無(wú)需在Windows上單獨(dú)編輯它們。如何在環(huán)境變數(shù)中使用設(shè)定檔Windows11和10在Windows上,有兩組環(huán)境變數(shù)–使用者變數(shù)(應(yīng)用於目前使用者)和系統(tǒng)變數(shù)(全域應(yīng)用)。但是,使用像PowerToys這樣的工具,您可以建立一個(gè)單獨(dú)的設(shè)定檔來(lái)新增的和現(xiàn)有的變數(shù)並一次管理它們。方法如下:步驟1:安裝PowerToysPowerTo

PHP7中的變數(shù)的嚴(yán)格模式:如何減少潛在的錯(cuò)誤? PHP7中的變數(shù)的嚴(yán)格模式:如何減少潛在的錯(cuò)誤? Oct 19, 2023 am 10:01 AM

PHP7中引入了嚴(yán)格模式,該模式可以幫助開發(fā)者減少潛在的錯(cuò)誤。本文將介紹什麼是嚴(yán)格模式以及如何在PHP7中使用嚴(yán)格模式來(lái)減少錯(cuò)誤。同時(shí),將透過程式碼範(fàn)例演示嚴(yán)格模式的應(yīng)用。一、什麼是嚴(yán)格模式?嚴(yán)格模式是PHP7中的一個(gè)特性,它可以幫助開發(fā)者編寫更規(guī)範(fàn)的程式碼,減少一些常見的錯(cuò)誤。在嚴(yán)格模式下,會(huì)對(duì)變數(shù)的宣告、型別檢查、函數(shù)呼叫等進(jìn)行嚴(yán)格的限制和偵測(cè)。通

什麼是Java中的實(shí)例變數(shù) 什麼是Java中的實(shí)例變數(shù) Feb 19, 2024 pm 07:55 PM

Java中的實(shí)例變數(shù)是指定義在類別中,而不是方法或建構(gòu)子中的變數(shù)。實(shí)例變數(shù)也稱為成員變量,每個(gè)類別的實(shí)例都有自己的一份實(shí)例變數(shù)副本。實(shí)例變數(shù)在創(chuàng)建物件的過程中被初始化,以及在物件的生命週期中保存並保持其狀態(tài)。實(shí)例變數(shù)的定義通常放在類別的頂部,可以用任何存取修飾符來(lái)聲明,可以是public、private、protected或預(yù)設(shè)存取修飾符。這取決於我們希望這個(gè)變

Python 語(yǔ)法的心智圖:深入理解程式碼結(jié)構(gòu) Python 語(yǔ)法的心智圖:深入理解程式碼結(jié)構(gòu) Feb 21, 2024 am 09:00 AM

python憑藉其簡(jiǎn)單易讀的語(yǔ)法,廣泛應(yīng)用於廣泛的領(lǐng)域。掌握Python語(yǔ)法的基礎(chǔ)架構(gòu)至關(guān)重要,既可以提高程式效率,又能深入理解程式碼的運(yùn)作方式。為此,本文提供了一個(gè)全面的心智圖,詳細(xì)闡述了Python語(yǔ)法的各個(gè)面向。變數(shù)和資料類型變數(shù)是Python中用於儲(chǔ)存資料的容器。心智圖展示了常見的Python資料類型,包括整數(shù)、浮點(diǎn)數(shù)、字串、布林值和列表。每個(gè)資料類型都有其自身的特性和操作方法。運(yùn)算符運(yùn)算符用於對(duì)資料類型執(zhí)行各種操作。心智圖涵蓋了Python中的不同運(yùn)算子類型,例如算術(shù)運(yùn)算子、比

如何使用Ajax從PHP方法取得變數(shù)? 如何使用Ajax從PHP方法取得變數(shù)? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法取得變數(shù)是Web開發(fā)中常見的場(chǎng)景,透過Ajax可以實(shí)作頁(yè)面無(wú)需刷新即可動(dòng)態(tài)取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範(fàn)例。首先,我們需要寫一個(gè)PHP檔案來(lái)處理Ajax請(qǐng)求,並傳回所需的變數(shù)。下面是一個(gè)簡(jiǎn)單的PHP檔案getData.php的範(fàn)例程式碼:

jQuery使用實(shí)踐:判斷變數(shù)是否為空的幾種方式 jQuery使用實(shí)踐:判斷變數(shù)是否為空的幾種方式 Feb 27, 2024 pm 04:12 PM

jQuery是一個(gè)廣泛應(yīng)用於Web開發(fā)中的JavaScript庫(kù),它提供了許多簡(jiǎn)潔方便的方法來(lái)操作網(wǎng)頁(yè)元素和處理事件。在實(shí)際開發(fā)中,常會(huì)遇到需要判斷變數(shù)是否為空的情況。本文將介紹使用jQuery判斷變數(shù)是否為空的幾種常用方法,並附上具體的程式碼範(fàn)例。方法一:使用if語(yǔ)句判斷varstr="";if(str){co

深入理解C語(yǔ)言中的const 深入理解C語(yǔ)言中的const Feb 18, 2024 pm 12:56 PM

C中const的詳解及程式碼範(fàn)例在C語(yǔ)言中,const關(guān)鍵字用來(lái)定義常數(shù),表示該變數(shù)的值在程式執(zhí)行過程中不能被修改。 const關(guān)鍵字可以用來(lái)修飾變數(shù)、函數(shù)參數(shù)、函數(shù)傳回值。本文將對(duì)C語(yǔ)言中const關(guān)鍵字的使用進(jìn)行詳細(xì)解析,並提供具體的程式碼範(fàn)例。 const修飾變數(shù)當(dāng)const用來(lái)修飾變數(shù)時(shí),表示變數(shù)為唯讀變量,一旦賦值就無(wú)法再修改。例如:constint

PHP函數(shù)介紹—is_string(): 檢查變數(shù)是否為字串 PHP函數(shù)介紹—is_string(): 檢查變數(shù)是否為字串 Jul 24, 2023 pm 09:33 PM

PHP函數(shù)介紹—strpos():檢查變數(shù)是否為字串在PHP中,is_string()是一個(gè)非常有用的函數(shù),它用來(lái)檢查變數(shù)是否為字串。當(dāng)我們需要確定變數(shù)是否為字串時(shí),is_string()函數(shù)可以幫助我們輕鬆實(shí)現(xiàn)這個(gè)目標(biāo)。下面我們將學(xué)習(xí)關(guān)於is_string()函數(shù)的使用方式以及提供一些相關(guān)程式碼範(fàn)例。 is_string()函數(shù)的語(yǔ)法非常簡(jiǎn)單。它只需

See all articles