$GLOBALS

(PHP 4, PHP 5, PHP 7, PHP 8)

$GLOBALSKüresel alanda bulunan bütün değişkenleri içerir

Açıklama

Geçerli betiğin küresel alanında tanımlı bütün değişkenleri içeren bütünleşik bir dizidir. Değişken isimleri dizinin anahtarlarıdır.

Örnekler

Örnek 1 - $GLOBALS örneği

<?php
function test() {
$foo = "yerel değişken";

echo
'$foo küresel alanda: ' . $GLOBALS["foo"] . "\n";
echo
'$foo yerel alanda: ' . $foo . "\n";
}

$foo = "Örnek içerik";
test();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

$foo küresel alanda: Örnek içerik
$foo yerel alanda: yerel değişken

Uyarı

PHP 8.1.0 itibariyle, $GLOBALS dizisinin tamamına yazma erişimi artık desteklenmemektedir:

Örnek 2 - $GLOBALS dizisini yeniden yazmak hataya yol açar.

<?php
// Derleme sırasında hata verir:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset(
$GLOBALS);
array_pop($GLOBALS);
// ... ve $GLOBALS üzerinde her türlü yaz/oku-yaz işlemi
?>

Notlar

Bilginize:

Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Bilginize: Değişken kullanılabilirliği

Diğer süper küresellerden farklı olarak, $GLOBALS PHP'de her zaman var olmuştur.

Bilginize:

PHP 8.1.0 itibariyle, $GLOBALS artık küresel simge tablosunun salt-okunur bir kopyasıdır. Yani, küresel değişkenlerde kopyası üzerinden değişiklik yapılamaz. Evvelce, $GLOBALS dizisine, PHP dizilerinin değerlerle tanımlanması davranışı uygulanmaz ve küresel değişkenlerde kopyaları üzerinden değişiklik yapılabilirdi.

<?php
// PHP 8.1.0 öncesinde
$a = 1;
$globals = $GLOBALS; // Görünüşte değere göre kopya
$globals['a'] = 2;
var_dump($a); // int(2)

// PHP 8.1.0 ve sonrasında
// $a artık $GLOBALS kopyasından değiştirilemez.
// Önceki davranış dizilerde değerle tanımlanma davranışı ile çelişiyordu.
$globals = $GLOBALS;
$globals['a'] = 1;

// Önceki davranışa dönmek istenirse, kopya üzerinde yineleme ile
// her özellik $GLOBALS dizisine yeniden atanmalıdır.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>

add a note

User Contributed Notes 4 notes

up
20
inafeeur at gmail dot com
2 years ago
We can be more clear with the extension of the given example.Before PHP Version 8.1<?php  $a = 1;  $globals = $GLOBALS;  $globals['a'] = 2;  echo $a; // 2  echo $globals['a']; // 2  echo $GLOBALS['a'];  // 2?>After PHP Version 8.1<?php  $a = 1;  $globals = $GLOBALS;  $globals['a'] = 2;  echo $a; // 1  echo $globals['a']; // 2  echo $GLOBALS['a'];  // 1?>
up
17
therandshow at gmail dot com
14 years ago
As of PHP 5.4 $GLOBALS is now initialized just-in-time. This means there now is an advantage to not use the $GLOBALS variable as you can avoid the overhead of initializing it. How much of an advantage that is I'm not sure, but I've never liked $GLOBALS much anyways.
up
16
mstraczkowski at gmail dot com
12 years ago
Watch out when you are trying to set $GLOBALS to the local variable.Even without reference operator "&" your variable seems to be referenced to the $GLOBALSYou can test this behaviour using below code<?php/** * Result: * POST: B, Variable: C * GLOBALS: C, Variable: C */ // Testing $_POST$_POST['A'] = 'B'; $nonReferencedPostVar = $_POST;$nonReferencedPostVar['A'] = 'C'; echo 'POST: '.$_POST['A'].', Variable: '.$nonReferencedPostVar['A']."\n\n"; // Testing Globals$GLOBALS['A'] = 'B'; $nonReferencedGlobalsVar = $GLOBALS;$nonReferencedGlobalsVar['A'] = 'C'; echo 'GLOBALS: '.$GLOBALS['A'].', Variable: '.$nonReferencedGlobalsVar['A']."\n\n";
up
13
vittorio.zamparella at famous googlemail
8 years ago
I finally found information about superglobals not being found in $GLOBALS:https://bugs.php.net/bug.php?id=65223&edit=2------------------------------------- [2013-07-09 12:00 UTC] johannes @php.net[...]super-globals (aka. auto globals) are not added to symbol tables by default for performance reasons unless the parser sees need. i.e. <?php$_SERVER;print_r($GLOBALS);?>will list it. You can also control this using auto_gloals_jit in php.ini: http://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit-------------------------------------http://www.php.net/manual/en/language.variables.variable.php-------------------------------------WarningPlease note that variable variables cannot be used with PHP's Superglobal arrays within functions or class methods. The variable $this is also a special variable that cannot be referenced dynamically.-------------------------------------
To Top