Heim php教程 php手册 PHP中global与$GLOBALS['']的区别

PHP中global与$GLOBALS['']的区别

Jun 07, 2016 am 11:39 AM

php纯技术探讨交流群:323899029
很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

根据官方的解释是

$GLOBALS['var'] 是外部的全局变量$var本身。
global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!)

举例说明一下:
php纯技术探讨交流群:323899029
+++ 探讨(一)+++++++++++++++++++++++++++++++++++++++

很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。

根据官方的解释是

$GLOBALS['var'] 是外部的全局变量$var本身。
global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!)

举例说明一下:


$var1 = 1;
$var2 = 2;
function test() {
$GLOBALS['var2'] = &$GLOBALS['var1'];
}

test();
echo $var2;
?>
正常打印结果为1


$var1 = 1;
$var2 = 2;

function test(){
global $var1, $var2;
$var2 = &$var1;
echo $var2;
$var2 = 'snsgou.com';
}

test(); // 输出 1
echo $var2; // 输出 2
echo $var1; // 输出 snsgou.com
?>

test()函数中的$var1,$va2都是局部变量,只不过是加了global关键字后,分别引用指向全局变量$var1,$va2了,当 $var2 = &$var1; 时,局部变量$var2不再指向全局变量$val2,而重新指向全局变量$var1,换句话来说,局部变量$var2的改变,不会再影响到全局变量$val2,而会影响到重新指向的全局变量$val1。

我们再来看一个例子吧。

$var1 = 1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
?>
因为$var1被删除了,所以什么东西都没有打印。


$var1 = 1;
function test(){
global $var1;
unset($var1);
}

test();
echo $var1;
?>
意外的打印了1。

证明删除的只是别名,$GLOBALS['var']的引用,起本身的值没有受到任何的改变。

明白了吧?

也就是说 global $var 其实就是$var = &$GLOBALS['var']。调用外部变量的一个别名而已。

+++ 探讨(二)++++++++++++++++++++++++++++++++++++++++++

PHP中global和$GLOBALS不仅仅是写法不一样以为,两者的区别还是很大的,在实际应用中需要注意!

先看下面的例子:

$id = 1;
function test() {
global $id;
unset($id);
}
test();
echo($id); // 输出 1
?>

引用定位

许多PHP的语法结构是通过引用机制实现的,所以上述有关引用绑定的一切也都适用于这些结构。一些结构,例如引用传递和引用返回,已经在上面提到了。其它使用引用的结构有:

当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的:

$GLOBALS["var1"] = 1;
$var = &$GLOBALS["var1"];
unset($var);
echo $GLOBALS['var1']; //输出1
//############################################
$GLOBALS["var1"] = 1;
$var = &$GLOBALS["var1"];
unset($GLOBALS['var1']);
echo $var; //输出1
//############################################
//如果写成如下,则会出错
$GLOBALS["var"] = 1;
$var = &$GLOBALS["var"];
unset($GLOBALS['var']);
echo $var; //脚本没法执行
//###########################################
?>

这意味着,例如,unset $var 不会 unset 全局变量。

unset只是把只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

使用isset($var)的时候返回 false。$this在一个对象的方法中,$this 永远是调用它的对象的引用。

如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。

可以通过使用 $GLOBALS 数组避免这一点。

例 在函数内引用全局变量:

$var1 = "Example variable";
$var2 = "";

function global_references($use_globals) {
global $var1, $var2;
if (!$use_globals) {
$var2 = &$var1; // visible only inside the function
} else {
$GLOBALS["var2"] = &$var1; // visible also in global context
}
}

global_references(false);
echo "var2 is set to '$var2'
"; // var2 is set to ''
global_references(true);
echo "var2 is set to '$var2'
"; // var2 is set to 'Example variable'
?>

把 global $var; 当成是 $var = &$GLOBALS['var']; 的简写。所以 如果将其它引用赋给 $var, 只改变了本地变量的引用。

如前所述,引用不是指针。这意味着下面的结构不会产生预期的效果:

$bar = 3;
function foo(&$var) {
$GLOBALS["baz"] = 5;
$var = &$GLOBALS["baz"];
}
foo($bar);
echo $bar;//输出3
?>

这将使 foo 函数中的 $var 变量在函数调用时和 $bar 绑定在一起,但接着又被重新绑定到了 $GLOBALS["baz"] 上面。

不可能通过引用机制将 $bar 在函数调用范围内绑定到别的变量上面,因为在函数 foo 中并没有变量 $bar(它被表示为 $var,但是 $var 只有变量内容而没有调用符号表中的名字到值的绑定)。可以使用引用返回来引用被函数选择的变量。

引用php手册的$GLOBALS的解释:

Global 变量:$GLOBALS,注意: $GLOBALS 在 PHP 3.0.0 及以后版本中适用。

由所有已定义全局变量组成的数组。变量名就是该数组的索引。这是一个“superglobal”,或者可以描述为自动全局变量。

也就是说上面代码中的$var1和$GLOBALS['var1']是指的同一变量,而不是2个不同的变量!

如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。

我们都知道php中的函数所产生的变量都是函数的私有变量,那么global关键字产生的变量也肯定逃不出这个规则,global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,一但改变了别名变量的指向地址,就会发生一些意料不到情况,$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致。

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

输出将是 “3″。在函数中申明 了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。

怎么不是2呢,在函数外部不是不影响吗,请注意$b在函数中并没有通过引用修改,而是修改的$b指向物理内存的值,因此外部输入为3。

AD:真正免费,域名+虚机+企业邮箱=0元

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erfahren Sie mehr über einführende Codebeispiele für die Python-Programmierung Erfahren Sie mehr über einführende Codebeispiele für die Python-Programmierung Jan 04, 2024 am 10:50 AM

Erfahren Sie anhand einführender Codebeispiele mehr über die Python-Programmierung. Python ist eine leicht zu erlernende und dennoch leistungsstarke Programmiersprache. Für Anfänger ist es sehr wichtig, die einführenden Codebeispiele der Python-Programmierung zu verstehen. In diesem Artikel finden Sie einige konkrete Codebeispiele, die Ihnen den schnellen Einstieg erleichtern. Print HelloWorldprint("HelloWorld") Dies ist das einfachste Codebeispiel in Python. Mit der Funktion print() wird der angegebene Inhalt ausgegeben

PHP-Variablen in Aktion: 10 Anwendungsbeispiele aus der Praxis PHP-Variablen in Aktion: 10 Anwendungsbeispiele aus der Praxis Feb 19, 2024 pm 03:00 PM

PHP-Variablen speichern Werte während der Programmlaufzeit und sind für den Aufbau dynamischer und interaktiver WEB-Anwendungen von entscheidender Bedeutung. Dieser Artikel wirft einen detaillierten Blick auf PHP-Variablen und zeigt sie anhand von 10 Beispielen aus der Praxis. 1. Benutzereingaben speichern $username=$_POST["username"];$passWord=$_POST["password"]; Dieses Beispiel extrahiert den Benutzernamen und das Passwort aus der Formularübermittlung und speichert sie zur weiteren Verarbeitung in Variablen. 2. Legen Sie den Konfigurationswert $database_host="localhost";$database_username="username";$database_pa fest

Vom Anfänger bis zum Experten: Code-Implementierung häufig verwendeter Datenstrukturen in der Go-Sprache Vom Anfänger bis zum Experten: Code-Implementierung häufig verwendeter Datenstrukturen in der Go-Sprache Mar 04, 2024 pm 03:09 PM

Titel: Vom Anfänger zur Meisterschaft: Code-Implementierung häufig verwendeter Datenstrukturen in der Go-Sprache. Datenstrukturen spielen eine wichtige Rolle in der Programmierung und sind die Grundlage der Programmierung. In der Go-Sprache gibt es viele häufig verwendete Datenstrukturen, und die Beherrschung der Implementierung dieser Datenstrukturen ist entscheidend, um ein guter Programmierer zu werden. In diesem Artikel werden die häufig verwendeten Datenstrukturen in der Go-Sprache vorgestellt und entsprechende Codebeispiele gegeben, um den Lesern den Einstieg bis zur Beherrschung dieser Datenstrukturen zu erleichtern. 1. Array Array ist eine grundlegende Datenstruktur, bei der es sich um eine Gruppe desselben Typs handelt.

So schreiben Sie mit PHP Funktionscode für die Bestandsverwaltung im Bestandsverwaltungssystem So schreiben Sie mit PHP Funktionscode für die Bestandsverwaltung im Bestandsverwaltungssystem Aug 06, 2023 pm 04:49 PM

So schreiben Sie mit PHP den Funktionscode für die Bestandsverwaltung im Bestandsverwaltungssystem. Die Bestandsverwaltung ist für viele Unternehmen ein unverzichtbarer Bestandteil. Für Unternehmen mit mehreren Lagern ist die Bestandsverwaltungsfunktion besonders wichtig. Durch die ordnungsgemäße Verwaltung und Nachverfolgung des Lagerbestands können Unternehmen den Lagerbestand auf verschiedene Lager verteilen, die Betriebskosten optimieren und die Effizienz der Zusammenarbeit verbessern. In diesem Artikel erfahren Sie, wie Sie mit PHP Code für Lagerverwaltungsfunktionen schreiben und erhalten relevante Codebeispiele. 1. Richten Sie die Datenbank ein, bevor Sie mit dem Schreiben des Codes für die Lagerverwaltungsfunktion beginnen.

Beispiele für Go-Sprachprogrammierung: Codebeispiele in der Webentwicklung Beispiele für Go-Sprachprogrammierung: Codebeispiele in der Webentwicklung Mar 04, 2024 pm 04:54 PM

„Beispiele zur Go-Sprachprogrammierung: Codebeispiele in der Webentwicklung“ Mit der rasanten Entwicklung des Internets ist die Webentwicklung zu einem unverzichtbaren Bestandteil verschiedener Branchen geworden. Als Programmiersprache mit leistungsstarken Funktionen und überlegener Leistung wird die Go-Sprache von Entwicklern in der Webentwicklung zunehmend bevorzugt. In diesem Artikel wird anhand spezifischer Codebeispiele erläutert, wie die Go-Sprache für die Webentwicklung verwendet wird, damit die Leser die Go-Sprache besser verstehen und zum Erstellen ihrer eigenen Webanwendungen verwenden können. 1. Einfacher HTTP-Server Beginnen wir zunächst mit a

Java implementiert einen einfachen Blasensortierungscode Java implementiert einen einfachen Blasensortierungscode Jan 30, 2024 am 09:34 AM

Das einfachste Codebeispiel für die Blasensortierung in Java ist ein allgemeiner Sortieralgorithmus. Seine Grundidee besteht darin, die zu sortierende Reihenfolge durch Vergleich und Austausch benachbarter Elemente schrittweise anzupassen. Hier ist ein einfaches Java-Codebeispiel, das zeigt, wie die Blasensortierung implementiert wird: publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

Huawei Cloud Edge Computing Interconnection Guide: Java-Codebeispiele zur schnellen Implementierung von Schnittstellen Huawei Cloud Edge Computing Interconnection Guide: Java-Codebeispiele zur schnellen Implementierung von Schnittstellen Jul 05, 2023 pm 09:57 PM

Huawei Cloud Edge Computing Interconnection Guide: Java-Codebeispiele zur schnellen Implementierung von Schnittstellen Mit der rasanten Entwicklung der IoT-Technologie und dem Aufstieg des Edge Computing beginnen immer mehr Unternehmen, der Anwendung von Edge Computing Aufmerksamkeit zu schenken. Huawei Cloud bietet Edge-Computing-Dienste und stellt Unternehmen äußerst zuverlässige Computerressourcen und eine praktische Entwicklungsumgebung zur Verfügung, wodurch Edge-Computing-Anwendungen einfacher zu implementieren sind. In diesem Artikel erfahren Sie, wie Sie die Huawei Cloud Edge Computing-Schnittstelle schnell über Java-Code implementieren. Zuerst müssen wir die Entwicklungsumgebung vorbereiten. Stellen Sie sicher, dass Sie das Java Development Kit installiert haben (

Anleitung und Beispiele: Erfahren Sie, wie Sie den Auswahlsortierungsalgorithmus in Java implementieren Anleitung und Beispiele: Erfahren Sie, wie Sie den Auswahlsortierungsalgorithmus in Java implementieren Feb 18, 2024 am 10:52 AM

Code-Schreibanleitung und Beispiele für die Java-Auswahlsortierung Die Auswahlsortierung ist ein einfacher und intuitiver Sortieralgorithmus. Die Idee besteht darin, jedes Mal das kleinste (oder größte) Element aus den unsortierten Elementen auszuwählen und es auszutauschen, bis alle Elemente sortiert sind. Dieser Artikel enthält eine Anleitung zum Schreiben von Code für die Auswahlsortierung und fügt spezifischen Java-Beispielcode hinzu. Algorithmusprinzip Das Grundprinzip der Auswahlsortierung besteht darin, das zu sortierende Array in zwei Teile zu unterteilen: sortiert und unsortiert. Dabei wird jeweils das kleinste (oder größte) Element aus dem unsortierten Teil ausgewählt und am Ende des sortierten Teils platziert. Wiederholen Sie das oben Gesagte

See all articles