Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类设计:仅仅为了从子类创建对象而创建对象是一种糟糕的形式吗?_Php_Language Agnostic_Class Design - Fatal编程技术网

Php 类设计:仅仅为了从子类创建对象而创建对象是一种糟糕的形式吗?

Php 类设计:仅仅为了从子类创建对象而创建对象是一种糟糕的形式吗?,php,language-agnostic,class-design,Php,Language Agnostic,Class Design,我目前有一个消息系统,它可以写入两个表,sent和received,这两个表大体上具有相同的模式 我编写了一个名为Message的类,该类在实例化两个子类之前填充用户输入的数据,这两个子类使用Message中的通用方法设置其余属性并将每个属性写入数据库。唯一显著的区别是子类中表示的一个字段及其相应的变量。所有其他属性都是消息的一部分 问题是,Message除了为所创建的对象提供通用方法和属性,并方便访问它的后代数据库类之外,没有其他用途 这被认为是不好的做法吗?消息类是单片的还是为了一个字段我应

我目前有一个消息系统,它可以写入两个表,
sent
received
,这两个表大体上具有相同的模式

我编写了一个名为
Message
的类,该类在实例化两个子类之前填充用户输入的数据,这两个子类使用
Message
中的通用方法设置其余属性并将每个属性写入数据库。唯一显著的区别是子类中表示的一个字段及其相应的变量。所有其他属性都是
消息的一部分

问题是,
Message
除了为所创建的对象提供通用方法和属性,并方便访问它的后代数据库类之外,没有其他用途


这被认为是不好的做法吗?
消息
类是单片的还是为了一个字段我应该进一步推它并合并子类?更好的方法是将类完全分开,一个用于发送,一个用于接收表吗

所以您有一个名为Message的类,它提供了公共函数和子类(即

为“已发送消息”的特定任务提供便利


这很有道理。这只是取决于有多少功能是分开的。如果唯一的区别是SentMessage和ReceivedMessage被标记为“sent”或“received”,那么最好在Message类中使用getMessageType()函数。但是,如果它更复杂,那么是的,你走在了正确的轨道上。

这是一个不错的设计。您基本上创建了一个。此类类不打算被实例化,而是包含在其他几个类中常见的代码

你遵循了一个原则:


当然,如果差异真的很小,那么您可以通过将所有内容放在一个类中来简化设计

问题是我编写类的方式是,
消息
类是由用户实例化的,因此我担心。特定于模式的差异是
last\u update
(datetime)与
date\u read
(datetime)以及它在类中使用的表名。用于发送消息的所有其他函数(输入验证、转义输入、写入表等)要么是
消息的一部分
,要么作为
消息的一部分调用。唯一的区别是用于显示收件箱和发件箱的查询,即使在那里,我也在考虑一个公共类,如果我能计算出来。@MrXexxed:如果该类是由用户实例化的,子类是如何发挥作用的?该类由(例如)send message页面实例化,该页面随后调用
message->send\u message
,这将依次创建
in_Msg
Out_Msg
的实例。这就是为什么我想知道我是否让事情变得比我需要的更难。对于显示消息而言,
Message
从未实例化,其他任何一个类都是直接从相关页面创建的,然后调用公共数据库类方法来构建查询等。
class SentMessage extends Message {