延长课程是一个好的做法吗?

2023-11-24

我的数据库类中有一个 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

关于如何调用我的数据库有什么想法吗?

这是我的代码:

类.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!';
    }


}

?>

类.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另一个,然后是那个班级is那个父类(仅稍微改变或扩展)。您可以传递这个子类而不是父类。例子:

class Foo { }

class Bar extends Foo { }

function baz(Foo $foo) { }

baz(new Bar);

这有效,baz()期望一个Foo但也接受Bar, 因为Bar is a Foo.

Now, is your Users a Database?不。您的用户不是数据库。您的用户use一个数据库。如果有的话,你应该使用作品:

class User {

    protected $database;

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

}

一个班级应该be它的职责是什么are。用户管理类的职责是管理用户数据。其中一部分可能涉及与数据库对话,但这并不意味着用户管理类is一个数据库。如果User extends Database,这意味着它可以做所有事情Database类可以做(以及更多)。这意味着您可以使用User无处不在的阶级代替 the Database类,这没有任何意义。将职责分开。

现在,这是否是正确的结构仍然存在争议,但它正朝着正确的方向发展。但你可能真的想拥有一个User类,代表one user。然后你就有了一个UserManager or UserORM or UserStorage或任何与检索和存储有关的内容User数据库中的对象。这堂课依次uses a Database就是这样做。这使得职责清晰且分离。这User类代表用户数据,Database类与数据库交互,UserORM/Manager/whatever中间两人进行谈判。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延长课程是一个好的做法吗? 的相关文章

  • 将 mysql LONGTEXT 值转换为 VARCHAR 值?

    我有一个在用户 Facebook 墙上发布的功能 我发送到 facebook 的一件事是我从设置为 LONGTEXT 的 mysql 表中获取的一些文本 如果我将表设置为 LONGTEXT 则文本不会发送到 facebook 但如果我将表设
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • 如何接收发送到 twilio 号码的短信

    我在 twilio 创建了一个免费帐户 用于通过我的网站发送短信 注册后 我得到了一个 twilio 号码 例如 XXX XXX XXXX 我可以向手机号码发送消息 但我不知道如何使用这个 twilio 号码接收短信 请帮我解决这个问题 T
  • MySQL 中的 UDF 性能

    我注意到 当查询在 SELECT 或 WHERE 子句中调用 UDF 时 MySQL 查询执行时间的性能会呈指数级下降 有问题的 UDF 查询本地表以返回标量值 因此它们不仅执行算术表达式 而且充当相关子查询 我通过简单地删除 UDF 并使
  • 使用 MySQLdb 在 Python 中执行 .sql 文件

    我有一个 sql 文件 其中包含一堆 SQL 查询 每个查询跨越多行 我想通过 Python 在 MySQL 中执行这些查询MySQLdb sqlite3为此目的有一个 非标准快捷方式 称为executescript http docs p
  • 在 PHP 中使用可变变量是不好的做法吗?

    例如 一个简单的MVC类型系统 api class method使用重写为 PHP 变量 htaccess nginx conf 然后做类似的事情
  • 如何使用 Google Calendar API 和官方 PHP 库创建全天活动?

    我有这个代码 event new Event event gt setSummary event summary event gt setLocation event location start new EventDateTime sta
  • 我应该在 Symfony 中哪里放置既不是控制器也不是模型的类?

    对于我的应用程序包 我需要一些既不是控制器也不是模型的类 例如 我想要一个scorecard具有诸如 技能 效率 美丽 等成员的类 此外 它可能具有诸如 meanScore 之类的成员方法 getters 这样的类在 Symfony 框架中
  • 从 PHP 启动守护进程

    对于网站 我需要能够启动和停止守护进程 我目前正在做的是 exec sudo etc init d daemonToStart start 守护进程已启动 但 Apache PHP 挂起 做一个ps aux透露sudo它本身变成了僵尸进程
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • MySQL:空间查询查找纬度/经度点是否位于给定边界内

    我正在研究谷歌地图搜索功能 其目的是找出 地理位置 点是否位于多边形内 如下图所示 我使用带有 Spatial 扩展的 mysql 5 6 20 我知道它内置有用的几何函数 因此我可以直接从数据库查询地理编码位置 我的目的是熟悉地理空间函数
  • PHP 中正确的存储库模式设计?

    前言 我尝试在具有关系数据库的 MVC 架构中使用存储库模式 我最近开始学习 PHP 中的 TDD 并且我意识到我的数据库与应用程序的其余部分耦合得太紧密 我读过有关存储库并使用国际奥委会容器 http laravel com docs 4
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • mysql:返回右侧第一个出现的子字符串? (子字符串?!)

    有没有办法返回sql中字符串右侧第一次出现的空格 我想你正在寻找类似的东西SUBSTRING INDEX http dev mysql com doc refman 5 0 en string functions html function
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 安装后步骤未成功完成 MySQL Mac OS Sierra

    pyEnv Anants MacBook Pro litibackend anantchandra brew postinstall mysql gt Postinstalling mysql gt usr local Cellar mys
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • Android中如何翻转ImageView?

    我正在开发一个需要翻转的应用程序ImageView触摸并将控制权转移到第二个活动 请帮我 我尝试了很多 但没有成功 谢谢大家 这是一个很好的翻转图像库 https github com castorflex FlipImageView
  • 在react-admin中拥有多个dataProvider的正确方法是怎样的?

    我试图在反应管理项目中使用多个数据提供程序 但出现错误 Warning Missing translation for key dataProvider is not a function function console anonymou
  • 可以在 app.config 中为 .NET 命名空间添加别名吗?

    ASP NET 有一个功能 允许您在 web config 中声明隐式使用的命名空间
  • ruby 中将二进制数据转换为字符串

    我有一个包含字节数据的字符串 如何执行到 ascii 字符串的就地转换 处理二进制数据的另一种方法是字符串 unpack
  • Python 中的新运算符

    我们可以定义Python的内在运算符 如下所示here 只是出于好奇 我们可以定义新的运算符吗 or 如果是这样 那么我们可以定义三元条件运算符或旋转运算符 正如 minitech 所说 你无法定义新的运算符 但是检查一下这个允许你定义中缀
  • 使Windows刷新图标缓存

    我真的很喜欢 KDE SC 4 的氧气外观 我编写了一个程序将这些图标应用到 Windows 该程序是用 NSIS 编写的 目前几乎功能齐全 但是 我发现让 Windows 意识到图标更改的唯一方法是终止 explorer exe 删除图标
  • Azure Functions ARM 模板重新部署会删除我发布的函数

    我有一个由 ARM 模板使用 Azure DevOps 管道部署的 Azure Functions 2 0 实例 我有另一个管道 通过 zip 部署将函数应用程序部署到实例 这几乎完美地工作 但是 如果我将功能基础设施部署为代码 然后部署应
  • 苹果应用内购买

    在设备上的沙盒环境中测试应用内购买时 我记录了以下错误 错误域 SKErrorDomain代码 0 无法连接到iTunes Store UserInfo 0x2916a0 NSLocalizedDescription 无法连接到iTunes
  • 如何使用 Webpack 导出函数并在 HTML 页面中使用它?

    我有一个名为index js use strict var require jquery window jQuery export function foo console log hello world 并且在同一个目录下 webpack
  • 如何摆脱Django Form的RadioSelect生成的虚假选择

    我在 Django 1 3 上使用 ModelForm 模型 py class UserProfile models Model gender models CharField max length 1 blank True choices
  • 如何对数据集进行排序?

    我有包含表项目的数据集 如何按代码字段对该表进行排序 提前致谢 With DataTable 你通常会排序一个DataView 例如 DataTable table dataSet Tables foo DataView view tabl
  • 突出显示文本,html 标签除外

    我使用下面的代码突出显示文本中的一些关键字 message str ireplace words span class hightlighted text words span message 文本可能包含一些html标签 例如 img s
  • 我可以将 MSVCRT 与 mingw 静态链接吗?

    我有编译用的 C 程序mingw在 Windows 上 它工作正常但需要MSVCRT DLL 我想静态链接它 就像我在 Visual Studio 中可以做的那样 这可能吗 I tried static标记为gcc它没有做出任何改变 也使用
  • Android - AlertDialog 样式

    我的应用程序中有一个警报对话框 如下所示 我希望标题和分隔标题 消息正文的线为橙色 我怎样才能做到这一点 我尝试的是使用自定义样式 如下所示 但这没有用 我的警报对话框代码 AlertDialog Builder alertDialog n
  • pymc3:具有多个观察变量的分层模型

    我有一个简单的分层模型 其中有很多个体 我有来自正态分布的小样本 这些分布的均值也遵循正态分布 import numpy as np n individuals 200 points per individual 10 means np r
  • 将 bytea 转换为二进制字符串

    我需要解码一个 Base64 字符串并获取一块二进制文件 Postgres中是否有一个SQL函数可以简单地转换bytea转换为二进制字符串表示形式 Like 00010001010101010 如果您的 Postgres 安装使用默认设置运
  • 如何选择具有给定类名的第一个、第二个或第三个元素?

    如何在元素列表中选择某个元素 我有以下内容 div class myclass my text1 div div p stuff p div div p more stuff p div p span Hello World span p
  • PHP GD如何在一条线上绘制文本

    The final output should be like image HELLO WORLD 这就是我正在做的 im imagecreate 400 400 txtcol imagecolorallocate im 0xFF 0x00
  • Android 打开外部存储目录(sdcard)用于存储文件

    我想打开外部存储目录路径以编程方式保存文件 我尝试过但没有获取 SD 卡路径 我该怎么办 有什么解决办法吗 private File path new File Environment getExternalStoragePublicDir
  • 延长课程是一个好的做法吗?

    我的数据库类中有一个 PDO 连接 最近我一直使用它作为其他类的扩展 即class Users extends Database这使我能够始终保持数据库连接 而无需在我的 Users 类中拥有函数 然而 有人指出我不应该这样做 因为这是一种