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

时间:2015-08-04 11:28:10

标签: php class global-variables

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

UIViewController

<?php
namespace test;

class calledClass {
    private $Variable;

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

和简单的config.php:

<?php
namespace test;

class callingClass {
    function __construct() {                
        require_once 'config.php';
        require_once 'calledClass.php';
        new calledClass();
    }
}

new callingClass();
?>

当我启动<?php namespace test; $testVar = 'there is a test content'; ?> (创建对象callingClass.php)时,calledClass中的属性$Variable为空。但是,当我手动启动calledClass时,它会从calledClass.php读取含义$testVar,并将其视为config.php

如果我在$Variable中将$testVar声明为global,则有帮助 - callingClass可以从calledClass宣读$testVar

有人可以告诉我为什么从另一个对象创建的对象不能将变量声明为全局变量并使用它们吗?

1 个答案:

答案 0 :(得分:0)

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

它与OOP完全无关,只与rules of function scoperequire_once的特定用途无关。