php - 声明一个空类不好吗?

标签 php oop

在业余时间,我正在构建一个数独求解器,以尝试掌握 PHP 中 OOP 的窍门。对于那些不知道的人来说,数独谜题的最常见形式是一个 9x9 矩阵,其中包含从 1 到 9 的数字,其中 3x3 正方形以类似井字游戏的模式划定。有些数字是预先填写的。拼图的目的是填满剩余的数字,这样任何行、列或 3x3 方 block 都不会多次包含相同的数字。

为此,我制作了一些类(class)。 Cell 可以是 Constraint 的元素,即行、列和 3x3 正方形。 SudokuConstraintCell 的集合。我有一个 SudokuSolver 类,它动态包含带有 SolverHelper 子类类声明的源文件,并实例化每个子类之一。一个助手有一个 Solve() 函数,它接受一个 Sudoku 作为参数。它检查 Constraint 并要求其单元格根据发现的内容消除值可能性。程序本身只是循环遍历助手,直到没有人报告他们能够再消除任何可能性。

但是,一行或一列中的所有单元格都排成一行这一事实具有某些推论,这些推论在某些解决方案技术中得到了利用。所以我需要区分行/列和其他 Constraint。我可以将行和列放在不同的数组中,这不是一个糟糕的解决方案。这具有提供良好优化机会的优势:例如,任何列都不会与另一列相交。我还可以添加一个 bool 属性 IsLinear

或者,现在我们来回答我的问题:我可以将 Constraint 类子类化为一个 LinearConstraint。但是那个类(class)是空的。它不需要覆盖 Constraint 类中的任何内容。这将是一对花括号,仅此而已; LinearConstraint 对象是特殊的,因为它是其类的实例。如果我想要或需要有与线性约束有关的特殊代码,我总是可以添加它。我的问题是:我正在考虑声明和使用一个空类的事实是否表明我做错了什么?我对此是否过于抽象和理论化?

最佳答案

一个空类一点也不坏。人们在其他各种场景中使用它;特别是在异常特化方面。

我认为这不会比在 Constraint 类中添加一个标志来区分这两种类型更糟糕。我宁愿选择扩展类,至少为了代码的可读性。

关于php - 声明一个空类不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551462/

相关文章:

php - MySQL/PHP/HTML 如何在分层下拉菜单中插入子项?

java - 如何通过构造函数中的依赖注入(inject)而不使用框架来应用记录器

php - 有没有办法集中预处理由 monolog 创建的所有日志?

php - 没有 isset 的 $_POST[] 工作正常但是......

javascript - 使用 PHP、AJAX、Javascript 的 Cordova/Phonegap 登录无法正常工作

c# - 如何从基类中隐藏基方法?

php - 在 PHP 中实现类似 .Net Collection 的类

PHP 依赖注入(inject) - 在构造函数中包含类名

php - 如何计算一个值在 MySQL 列中出现的次数?

php 在运行时创建类方法