在php中具有递归属性的对象

时间:2013-05-15 15:35:02

标签: php oop recursion

我正在使用类moduleSelectQuery来生成PHP中的SQL查询。

基本上,这个类会分解SQL SELECT查询的各个组件,例如表名,要选择的字段,WHERE条件等。

但是,嵌套查询(例如WHERE table1.field1 IN (SELECT table2.field2 from table2 WHERE table2.field3 = criteria)

)会很快变得复杂

目前,我有一个名为moduleSelectQuery的{​​{1}}属性,用于存储$inWhereClause子句。与其他属性(即WHERE... IN(SELECT...))一样,它可以根据用户输入通过自己的函数一起解析。

但是,这种解析功能基本上是有限的。即使我在解析$tableName, $whereClause, $havingClause属性时投入了足够的精力,它也不能有其他嵌套的select语句。

我认为一种方法是将$whereClause设置为另一个$inWhereClause对象。这意味着父moduleSelectQuery将拥有一个本身为moduleSelectQuery的属性,即它将是一个递归对象。这是PHP的可行/良好实践吗?还有其他缺点吗?

1 个答案:

答案 0 :(得分:0)

我可以看到这是一个可能的解决方案。可视化具有Person类。一个人可能有一个孩子,这是一个人。似乎并不合理。

我不一定将此称为递归对象,因为对象不引用自身,而是对象可以具有属性,该属性是同一个类的实例。

显然需要适当地嵌套,因为Where语句中的子查询只需要是moduleSelectQuery对象,其中简单的比较将是字符串或整数的实例。

这种方法可以带来的唯一缺点是在类和方法的设计中。我没有看到任何明显的性能问题或可维护性问题。