有两个类,每个类都在自己的文件中:
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
。
有人可以告诉我为什么从另一个对象创建的对象不能将变量声明为全局变量并使用它们吗?
答案 0 :(得分:0)
在函数中包含(include
/ require
)文件时,该文件中的所有变量声明都会获得该函数的作用域。因此$testVar
是在callingClass::__construct
范围内创建的。 由于您使用require_once
,,因此不会在calledClass::__construct
内的其他位置重新创建!它仅在调用calledClass
时有效,因为您实际上是第一次包含该文件。
它与OOP完全无关,只与rules of function scope和require_once
的特定用途无关。