我想知道你是否可以解释为什么PHP在__construct方法中包含文件时会这样做。
class sitePosting{
private $conx;
public function __construct() {
include_once("".$_SERVER['DOCUMENT_ROOT']."/auth/db_conx.php");
$this->conx = $conx;
}
似乎如果我调用另一个在__construct中包含此文件的类,我在第一个类中尝试使用$ conx时会得到一个未定义的变量错误,但是从我所理解的不是__construct运行时该对象是第一次建造?
如果我改变了什么呢?
include_once("".$_SERVER['DOCUMENT_ROOT']."/auth/db_conx.php");
以
include("".$_SERVER['DOCUMENT_ROOT']."/auth/db_conx.php");
这完全解决了问题,但我不知道为什么
对于为什么会发生这种情况的任何见解都表示赞赏。
谢谢,
答案 0 :(得分:1)
正如名称所示:include_once仅包含一次文件。如果您之前已将其包含在内,则不会再次包含它。此外,与JavaScript不同,类和函数不会看到全局范围的变量。这就是你的sitePosting类中无法访问$ conx变量的原因。
如果你把$ conx作为类参数放在这样会更好:
public function __construct($conx) {
$this->conx = $conx;
}
它被称为依赖注入,绝对是一个很好的实践。使您的代码更清晰,更难以使用。