【问题标题】:My Custom MysqliDatabase class doesn't return an instance of mysqli我的自定义 MysqliDatabase 类不返回 mysqli 的实例
【发布时间】:2015-06-27 15:44:30
【问题描述】:

作为参考,我有3个类+接口:

  • DBFactory
  • AbstractDB
  • DBIntreface
  • MysqliDatabase

据我所知,问题出在MysqliDatabase

class MysqliDatabase extends AbstractDB {

    public function __construct()
    {
        return new mysqli(
            $GLOBALS['host'],
            $GLOBALS['user'],
            $GLOBALS['pass'],
            $GLOBALS['database']
        );
    }
}

现在,我要做的就是创建一个创建 mysqli 连接的类。如果我将代码复制到我的主脚本并运行它,它就可以工作。但是,在课堂上却没有。

谁能告诉我为什么?

编辑

我也试过这个,还有一些变化:

MysqliDatabase

class MysqliDatabase extends AbstractDB {

    public $db;

    public function __construct()
    {

        $db = new mysqli(
            $GLOBALS['host'],
            $GLOBALS['user'],
            $GLOBALS['pass'],
            $GLOBALS['database']
        );
        $this->db = $db;

        return $this->db;
    }
}

【问题讨论】:

  • 在任何人说什么之前,我可能会用常量或其他东西替换$GLOBALS
  • 你不能从类构造函数返回任何东西。您应该设置一个属性。
  • @jeroen 你的意思是喜欢我的编辑?
  • 你仍然不能从类构造函数返回任何东西。您需要删除构造函数的最后一行。

标签: php mysql oop mysqli


【解决方案1】:

MysqliDatabase不扩展mysql 类。一种解决方案是直接扩展mysql 类并通过接口添加任何AbstractDB 方法。另一种是使用factory pattern

类构造函数只能返回类的一个实例(使用严格意义上不是面向对象的javascript时除外)

【讨论】:

  • 你的意思是构造函数所在的类,而不仅仅是任何类的实例?
  • @nobrandheroes,没错,每个构造函数都是针对一个特定的类,只有那个,所以构造函数不能返回任何其他内容,如果你想透明地处理多个数据库,请尝试工厂模式跨度>
  • 我已经有了一个因子模式,但多亏了你,我找到了一个解决方案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
相关资源
最近更新 更多