欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP变量作用域,全局变量和局部变量,global和GLOBALS

程序员文章站 2024-03-19 14:02:10
...

在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.

超级全局变量

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

$GLOBALS 所有全局变量数组
$_SERVER 服务器环境变量数组
$_GET 通过GET方法传递给该脚本的变量数组
$_POST 通过POST方法传递给该脚本的变量数组
$_COOKIE cookie变量数组
$_FILES 与文件上载相关的变量数组
$_ENV 环境变量数组
$_REQUEST 所有用户输入的变量数组
$_SESSION 会话变量数组

全局变量和局部变量

1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾,但不包括函数内
2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。

<?php
$var1 = 1;
$var2 = 11;
function foo()
{
    echo "未知变量 var1 = $var1 \n";// 
    global $var1,$var2;
    $var1 += 1;
    $var2 = "sss";
}
foo();
echo "函数外全局变量 var1 === $var1 \n";
echo "函数外全局变量 var2 === $var2 \n";
?>

global和GLOBALS

1、$GLOBALS[‘var’]是外部的全局变量本身
2、global varvar是外部var的同名引用或者指针。
3、函数内针对gobal变量 调用unset()或者&赋值,改变的是函数内变量,不会影响函数外全局变量
4、任意对方针对GLOBALS[var],调用unset或者&,改变的都是全局变量本身

    $var1 = $var2 = $var3 = 1;
    //global 使用&改变变量引用,使用unset()
    function foo2()
    {
        global $var1,$var2,$var3;
        $var1 = &$var2;
        $var1 = 21;
        unset($var3);
    }
    foo2();
    echo "global下 &操作改变var1 为var2,同时改变var1  此时var1=== $var1 \n";//var1仍为1
    echo "global下 &操作改变var1 为var2,同时改变var1  此时var2=== $var2 \n";//var2从11->22
    echo "global下 unset(var3) === $var3 \n";
    // GLOBAL操作
    $var1 = $var2 = $var3 = 1;
    function foo3()
    {
        // GLOBALS["var1"]
        echo "函数内GLOBALS[VAR1] =====  ",$GLOBALS['var1'],"\n";
        echo "函数内GLOBALS[VAR2] =====  ",$GLOBALS['var2'],"\n";
    
        $GLOBALS['var1'] = &$GLOBALS['var2'];
        $GLOBALS['var1'] = 33;
        unset($GLOBALS['var3']);
    }
    
    foo3();
    echo "函数外全局变量GLOBALS[VAR1] =====  ",$var1,"\n";
    echo "函数外全局变量GLOBALS[VAR2] =====  ",$var2,"\n";
    echo "函数外全局变量GLOBALS[VAR3] =====  ",$var3,"\n";

const,static,define

1、define是一个函数,可以出现在任意允许使用函数的地方
bool define ( string $name , mixed $value [, bool $case_insensitive = false ]
define可以使用表达式
define第三个参数表示忽略大小写
define变量不需加 $
2、const 在编译器执行
const必须出现在作用域顶端,不能存在于函数,循环,if语句中
const可以出现在class,interface中
const变量不需要 $
3、static 指静态变量,需要关键字 $
函数体中的静态变量
类中的静态属性和方法

    define("TOTAL",1000);
    echo TOTAL,"\n";
    
    $var1 = 100;
    define("VAR_".$var1,$var1+100);
    echo VAR_100,"\n";
    
    const CONST_PI = 3.14159;
    echo CONST_PI,"\n";
    
    function fun()
    {
        static $s1 = 100;
        return $s1++;
    }
    
    echo fun(),"\n";
    echo fun(),"\n";
    echo fun(),"\n";
相关标签: php变量作用域