扩展课堂是一种好习惯吗?

001221

我的数据库类中有一个PDO连接,最近我一直使用它作为其他类的扩展,即,class Users extends Database这使我可以始终保持数据库连接,而不必在Users类中具有功能。

但是有人指出,我不应该这样做,因为这是错误的做法吗?以及如何在不扩展的情况下连接到用户类中的数据库类?

目前,我在viewall()函数内部有对数据库的调用,我试图将其放入__construct()函数中,但是它坚持要有参数

我试过下面的代码,但是收到如下错误消息:

Fatal error: Call to undefined method Database::prepare() in E:\xampp\htdocs\attendance\class.Register.php on line 13

关于如何调用数据库的任何想法?

这是我的代码:

class.Connect.php

<?php

// Database connection PDO

class Database {

    public function __construct() {
        // Connection information
        $host   = 'localhost';
        $dbname = 'attendance';
        $user   = 'root';
        $pass   = '';

        // Attempt DB connection
        try
        {
            $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            //echo 'Successfully connected to the database!';
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

    }

     public function __destruct()
    {
        // Disconnect from DB
        $this->pdo = null;
        //echo 'Successfully disconnected from the database!';
    }


}

?>

class.Register.php

<?php

require 'class.Connect.php';

class Register {

    public function viewall() {
        $pdo = new Database();

        $stmt = $pdo->prepare('SELECT * FROM users');
        $stmt->execute();

    $stmt->fetch();

    }
}

$run = new Register();
$run->viewall();

?>

简单的经验法则:如果一个类是extends另一个,则该类该父类(仅稍作更改或扩展)。您可以传递此子类而不是父类。例:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

这个工程,baz()预计一Foo也接受Bar,因为Bar 一个Foo

现在,Users 一个Database否。您的用户不是数据库。您的用户使用数据库。如果有的话,您应该使用composition

class User {

    protected $database;

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

}

一类应该什么样的责任用户管理类的职责是管理用户数据。其中的一部分可能涉及与数据库对话,但这并不意味着用户管理类数据库。如果为User extends Database,则表示它可以执行Database该类可以执行的所有操作(以及更多操作)。这意味着你可以使用User随处可见的类来代替Database类,并且不作任何意义。将职责分开。

现在,这是否是正确的结构仍值得商,,但它朝着正确的方向发展。但是您可能真的想要一个User代表一个用户的类然后,您将拥有一个UserManageror或UserORMorUserStorage或其他任何东西,它与User在数据库中检索和存储对象有关此类依次使用aDatabase来做到这一点。这样可以使责任明确和分离。所述User类表示用户数据,则Database与数据库交互类,则UserORM/Manager/whatever在这两者之间的中间谈判中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ThreadPoolExecutor中设置allowCoreThreadTimeOut()是一种好习惯吗?

来自分类Dev

假冒插入程序是一种好习惯吗?

来自分类Dev

使用WCF简化配置是一种好习惯吗?

来自分类Dev

Symfony2和MVC-扩展控制器是一种好习惯吗?

来自分类Dev

创建这样的Java Frame是一种好习惯吗?

来自分类Dev

编写接口以帮助测试是一种好习惯吗?

来自分类Dev

创建ContainerBuilder的新实例是一种好习惯吗?

来自分类Dev

在$ rootScope中存储变量是一种好习惯吗?

来自分类Dev

经常使用instanceof是一种好习惯吗?

来自分类Dev

将Laravel模型扩展到多层以上是一种好习惯吗?

来自分类Dev

索引数组字面量是一种好习惯吗?

来自分类Dev

嵌套诺言是一种好习惯吗?

来自分类Dev

大量使用本地存储是一种好习惯吗?

来自分类Dev

在ReactJS中操作DOM是一种好习惯吗?

来自分类Dev

打破特殊事件的for循环是一种好习惯吗?

来自分类Dev

静态导入是一种好习惯吗?

来自分类Dev

要求用户“扩展”我的Laravel 4软件包以使用它是一种好习惯吗?

来自分类Dev

将include指令合并到一个文件中是一种好习惯吗

来自分类Dev

从ViewModel调用业务逻辑是一种好习惯吗

来自分类Dev

便利功能是一种好习惯吗?

来自分类Dev

设置包装器类是一种好习惯吗?

来自分类Dev

编写接口以帮助测试是一种好习惯吗?

来自分类Dev

使用幻数是一种好习惯吗?

来自分类Dev

退还空尸体是一种好习惯吗?

来自分类Dev

在dataProvider中定义期望是一种好习惯吗

来自分类Dev

小写网址-是一种好习惯吗?

来自分类Dev

模仿RecyclerView onItemClick(),这是一种好习惯吗?

来自分类Dev

索引数组字面量是一种好习惯吗?

来自分类Dev

通过使用方法扩展类是否是一种好习惯?

Related 相关文章

  1. 1

    在ThreadPoolExecutor中设置allowCoreThreadTimeOut()是一种好习惯吗?

  2. 2

    假冒插入程序是一种好习惯吗?

  3. 3

    使用WCF简化配置是一种好习惯吗?

  4. 4

    Symfony2和MVC-扩展控制器是一种好习惯吗?

  5. 5

    创建这样的Java Frame是一种好习惯吗?

  6. 6

    编写接口以帮助测试是一种好习惯吗?

  7. 7

    创建ContainerBuilder的新实例是一种好习惯吗?

  8. 8

    在$ rootScope中存储变量是一种好习惯吗?

  9. 9

    经常使用instanceof是一种好习惯吗?

  10. 10

    将Laravel模型扩展到多层以上是一种好习惯吗?

  11. 11

    索引数组字面量是一种好习惯吗?

  12. 12

    嵌套诺言是一种好习惯吗?

  13. 13

    大量使用本地存储是一种好习惯吗?

  14. 14

    在ReactJS中操作DOM是一种好习惯吗?

  15. 15

    打破特殊事件的for循环是一种好习惯吗?

  16. 16

    静态导入是一种好习惯吗?

  17. 17

    要求用户“扩展”我的Laravel 4软件包以使用它是一种好习惯吗?

  18. 18

    将include指令合并到一个文件中是一种好习惯吗

  19. 19

    从ViewModel调用业务逻辑是一种好习惯吗

  20. 20

    便利功能是一种好习惯吗?

  21. 21

    设置包装器类是一种好习惯吗?

  22. 22

    编写接口以帮助测试是一种好习惯吗?

  23. 23

    使用幻数是一种好习惯吗?

  24. 24

    退还空尸体是一种好习惯吗?

  25. 25

    在dataProvider中定义期望是一种好习惯吗

  26. 26

    小写网址-是一种好习惯吗?

  27. 27

    模仿RecyclerView onItemClick(),这是一种好习惯吗?

  28. 28

    索引数组字面量是一种好习惯吗?

  29. 29

    通过使用方法扩展类是否是一种好习惯?

热门标签

归档