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

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

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

May 25, 2016 pm 04:48 PM
global ??? ??

在php中變量有很多種如普通的變量及全局變量(Global與$GLOBALS),本文章來給大家介紹在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ō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)前頁面,包括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是打印不出來任何東西的.因此聲明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è)不同的變量!下面來分析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;來測(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è)不同的變量!

下面來分析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;來測(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


? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1601
29
PHP ????
1502
276
???
?????? Windows 11 ? 10 ?? ??? ???? ??? ?? ??? ?????? Windows 11 ? 10 ?? ??? ???? ??? ?? ??? Nov 01, 2023 pm 08:13 PM

?? ??? ??????? ????? ???? ??(?? ??)? ?? ?????. ???? ??, ??, ?? ?? ??? ? ??? ?? ????? ??? ??? ? ?????. Windows?? ????? ??? ?? ?? ?? ??? ??? ???? ?? ?? ??? ??? ??? ??? ????. ?? ?? Windows 11 ? 10?? ???? ???? ?? Windows?? ??? ??(?? ????? ??)? ??? ??(????? ??)?? ? ?? ?? ?? ??? ????. ??? PowerToys? ?? ??? ???? ??? ?? ??? ??? ? ??? ?? ??? ???? ? ?? ??? ? ????. ??? ??? ????. 1??: PowerToysPowerTo ??

PHP7? ??? ?? ??? ??: ???? ??? ??? ??? ?????? PHP7? ??? ?? ??? ??: ???? ??? ??? ??? ?????? Oct 19, 2023 am 10:01 AM

?? ??? ???? ???? ??? ??? ? ??? ? ? ?? PHP7? ???????. ? ????? ?? ??? ????, PHP7?? ?? ??? ???? ??? ??? ??? ?????. ???, ?? ??? ?? ?? ??? ??? ?????. 1. ?? ??? ?????? ?? ??? ???? ?? ???? ??? ???? ? ?? ???? ??? ??? ? ??? ?? PHP7? ?????. ?? ????? ?? ??, ?? ??, ?? ?? ?? ?? ??? ?? ? ??? ????. ????

Java? ???? ?? ? ?????? Java? ???? ?? ? ?????? Feb 19, 2024 pm 07:55 PM

Java? ???? ??? ???? ???? ?? ???? ??? ??? ?????. ???? ??? ?? ????? ???. ???? ? ?????? ???? ??? ?? ???? ????. ???? ??? ?? ?? ?? ????? ?? ??? ?? ?? ?? ?? ? ?????. ???? ?? ??? ????? ???? ? ?? ???? public, private, protected ?? ?? ??? ???? ??? ?? ??? ???? ???? ??? ? ????. ??? ??? ??? ?? ????? ?? ????.

Python ?? ????: ?? ??? ?? ???? ?? Python ?? ????: ?? ??? ?? ???? ?? Feb 21, 2024 am 09:00 AM

Python? ???? ?? ?? ???? ??? ???? ?? ?????. ????? ???? ??? ?? ?? ??? ?? ????? Python ??? ?? ??? ???? ?? ?????. ?? ?? ? ????? Python ??? ??? ??? ??? ???? ???? ??? ?? ?????. ?? ? ??? ?? ??? Python?? ???? ???? ? ???? ???????. ????? ??, ?? ??? ??, ???, ?? ? ? ??? ??? ???? Python ??? ??? ?????. ? ??? ???? ??? ??? ?? ??? ????. ??? ???? ??? ??? ?? ??? ??? ???? ? ?????. ????? ?? ???, ?? ? Python? ??? ??? ??? ????.

Ajax? ???? PHP ????? ??? ?? ??? ?????? Ajax? ???? PHP ????? ??? ?? ??? ?????? Mar 09, 2024 pm 05:36 PM

Ajax? ???? PHP ????? ??? ?? ?? ? ??? ???? ???????. Ajax? ?? ???? ?? ??? ??? ???? ???? ?? ? ????. ? ????? Ajax? ???? PHP ????? ??? ???? ??? ???? ???? ?? ??? ?????. ?? Ajax ??? ???? ??? ??? ???? ?? PHP ??? ???? ???. ??? ??? PHP ?? getData.php? ?? ?? ?????.

jQuery ?? ??: ??? ?? ??? ???? ?? ?? ?? jQuery ?? ??: ??? ?? ??? ???? ?? ?? ?? Feb 27, 2024 pm 04:12 PM

jQuery? ? ??? ?? ???? JavaScript ??????, ? ??? ??? ???? ???? ???? ???? ??? ??? ?? ?????. ?? ????? ??? ?? ??? ???? ?? ??? ?? ?????. ? ????? jQuery? ???? ??? ?? ??? ???? ?? ?? ??? ???? ? ?? ???? ??? ?????. ?? 1: if ?? ???? varstr="";if(str){co ??

C ??? const? ?? ?? ?? C ??? const? ?? ?? ?? Feb 18, 2024 pm 12:56 PM

C?? const? ?? ??? ?? ? ?? ? C ????? const ???? ???? ??? ?????, ?? ???? ?? ?? ??? ?? ??? ? ??? ?????. const ???? ???? ??, ?? ???? ? ?? ?? ?? ??? ? ????. ? ????? C ???? const ??? ??? ?? ??? ??? ???? ???? ?? ??? ?????. const ??? ?? const? ???? ??? ???? ?? ?? ?? ??? ?? ?? ???? ?? ???? ??? ? ??? ?????. ?: ??

Jul 24, 2023 pm 09:33 PM

PHP ?? ??—strpos(): ??? ????? ?????. PHP?? is_string()? ??? ????? ???? ? ???? ?? ??? ?????. ??? ????? ???? ? ? is_string() ??? ???? ? ??? ?? ??? ? ????. ????? is_string() ??? ???? ??? ?? ???? ?? ?? ??? ?????. is_string() ??? ??? ?? ?????. ??? ?? ????

See all articles