【问题标题】:undefined variable $conx in class类中未定义的变量 $conx
【发布时间】:2015-02-14 12:37:03
【问题描述】:

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

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

感谢您了解发生这种情况的原因。

谢谢,

【问题讨论】:

  • $conx 在构造函数中声明在哪里?
  • 在 db_conx.php 中声明为 mysqli 对象

标签: php class oop include


【解决方案1】:

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

如果您像这样将 $conx 作为类参数放置会更好:

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

它被称为依赖注入,绝对是一个很好的使用习惯。使您的代码更加简洁和易于理解。

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 2018-06-23
    • 2012-03-04
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多