类中未定义的变量$ conx

时间:2015-02-14 12:37:04

标签: php class oop include

我想知道你是否可以解释为什么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");

这完全解决了问题,但我不知道为什么

对于为什么会发生这种情况的任何见解都表示赞赏。

谢谢,

1 个答案:

答案 0 :(得分:1)

正如名称所示:include_once仅包含一次文件。如果您之前已将其包含在内,则不会再次包含它。此外,与JavaScript不同,类和函数不会看到全局范围的变量。这就是你的sitePosting类中无法访问$ conx变量的原因。

如果你把$ conx作为类参数放在这样会更好:

public function __construct($conx) {
    $this->conx = $conx;
}

它被称为依赖注入,绝对是一个很好的实践。使您的代码更清晰,更难以使用。