zoukankan      html  css  js  c++  java
  • PHP变量作用域(花括号、global、闭包)

    花括号

    很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。

    <?php
    if (True) {
    	$a = 'var a';
    }
    
    var_dump($a);
    
    for ($i = 0; $i < 1; $i++) {
    	$b = 'var b';
    	for ($i = 0; $i < 1; $i++) {
    		$c = 'var c';
    	}
    	var_dump($c);
    }
    
    var_dump($b);
    var_dump($c);
    ?>

    运行结果是:

    string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"

    可见iffor的花括号并无构成新的作用域。

    而函数:

    <?php
    function test() {
    	$test = 'var test';
    }
    
    test();
    var_dump($test);
    ?>

    结果是:

    NULL

    global关键字

    PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。

    执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。

    global关键字无论在哪层,所引用的都是全局域的变量。

    <?php
    $test = 'global test';
    function a() {
    	$test = 'test in a()';
    	function b() {
    		global $test;
    		var_dump($test);
    	}
    	b();
    }
    
    a();
    ?>

    执行结果是:

    string(11) "global test"

    闭包

    闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。

    <?php
    function a() {
    	$test = 'test in a()';
    	function b() {
    		var_dump($test); // $test不能被访问
    		$varb = 'varb in b()';
    	}
    
    	b();
    	var_dump($varb); // $varb也不能被访问
    }
    
    a();
    ?>

    执行结果:

    NULL NULL

    延伸阅读:

  • 相关阅读:
    socket.io建立长连接
    编译性语言、解释性语言和脚本语言的区别
    回调函数
    jquery文档处理
    css--Bootstrap框架
    css--960框架
    html基础
    真的理解闭包了吗,用闭包的时候应该注意什么?
    初识reactJs 相关
    简单方便的div垂直居中。
  • 原文地址:https://www.cnblogs.com/52php/p/5670067.html
Copyright © 2011-2022 走看看