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

    延伸阅读:

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/52php/p/5670067.html
Copyright © 2011-2022 走看看