【问题标题】:Database class conflicts with other classess数据库类与其他类冲突
【发布时间】:2012-04-02 19:38:19
【问题描述】:

我一直因某种冲突问题而陷入困境。有一个包含连接、更新、删除、插入、获取方法的数据库类,还有一个扩展数据库类的用户类。

class User extends Database {...}

问题是,当我在“index.php”中同时初始化数据库类和用户类时,我收到一个致命错误,上面写着“致命错误:无法重新声明类数据库”。

include "database.class.php";
include "user.class.php;
$db = new Database;
$db->connect();

所以,我知道两次初始化数据库类,但是如何防止不发生呢? P.S.:我可以在其他新类中使用 Database 类。

【问题讨论】:

  • require_once("database.class.php"); 而不是 include,无论您在哪里包含它。
  • PHP: cannot redeclare class 的可能重复项
  • 只是为了让它正确:用户是数据库?!哦
  • 这不起作用迈克尔。不幸的是仍然有同样的错误。
  • 用户类是一个类@KingCrunch。

标签: php oop class declaration extends


【解决方案1】:

在 OOP 中,extends 表示“是一个”。你在那里写的是:“用户是一个数据库”。这无疑是疯狂的。

您应该将其注入到User 实例的构造函数中,而不是扩展数据库类:

$database = new Database(...);
$database->connect();
$user = new User( $database );

总是favor composition over inheritance

至于所有require_once 混乱.. 学习如何使用spl_autoload_register()

【讨论】:

  • 你能举个例子我将如何使用吗?用户类的构造函数应该如何?这种用法对我来说有点奇怪。
  • @GncArt ,任何类的构造函数都应该只为局部变量赋值。在编写良好的面向对象代码中,构造函数不做任何“工作”。
  • @GncArt ,如果你真的想了解更多关于 OOP 的知识,你应该看一些关于主题的讲座。如果您滚动到this comment 的“OOP 超越类”部分,将会有一个关于该主题的视频列表。看他们。你会从他们身上学到很多东西......我确实做到了。
【解决方案2】:

如 Michael 所说,更改“require_once”的两个“包含”:

require_once "database.class.php";
require_once "user.class.php";
$db = new Database;
$db->connect();

此外,如果在文件“user.class.php”中包含文件“database.class.php”,也将其更改为“require_once”。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多