从另一个对象创建的对象中的全局变量



有两个类,每个在它自己的文件中:

<?php
namespace test;
class calledClass {
    private $Variable;
    function __construct() {
        global $testVar;
        require_once 'config.php';
        $this->Variable = $testVar;
        echo "test var: ".$this->Variable;        
    }
}
?>

<?php
namespace test;
class callingClass {
    function __construct() {                
        require_once 'config.php';
        require_once 'calledClass.php';
        new calledClass();
    }
}
new callingClass();
?>

和config.php:

<?php
namespace test;
$testVar = 'there is a test content';
?>

当我启动callingClass.php(创建对象calledClass)时,calledClass中的$Variable属性为空。但是当我手动启动calledClass.php时,它从config.php读取$testVar的含义,并假设它为$Variable

如果我在callingClass中将$testVar声明为global, calledClass可以从config.php读取$testVar

谁能告诉我为什么从另一个对象创建的对象不能声明变量为全局,并使用它们?

当在函数中包含(include/require)文件时,该文件中的所有变量声明都获得该函数的作用域。所以$testVar是在callingClass::__construct的范围内创建的。由于您使用require_once将不会在calledClass::__construct内的其他地方重新创建!它只在调用calledClass时有效,因为您实际上是第一次在那里包含该文件。

它与OOP完全无关,只是函数作用域的规则和您对require_once的特殊使用。

相关内容

  • 没有找到相关文章

最新更新