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

在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 v a r var是外部 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";
发布了19 篇原创文章 · 获赞 2 · 访问量 1775

猜你喜欢

转载自blog.csdn.net/karaa/article/details/90116801