目前,我为每个数据库表构建了两个类。例如,如果我有表person
,我将会有Person_List
和Person
类。
设计明智,是否更好
Person_List
输出Person
数组;或性能方面,哪个更好?
答案 0 :(得分:2)
我认为,设计方面,并考虑到性能,将是(如果你坚持Person_List
类代表表,Person
代表单个记录):
Iterator
interface用于Person_List
类,这样您就可以遍历表格而无需一次性提取所有记录(在某些情况下应该会显着提升性能)例),Countable
interface用于Person_List
课程,因此您可以在必要时通过直接从数据库中获取数据来计算所有结果,这应该为您提供灵活性,并允许您像数组一样使用Person_List
类对象。
如果您仍然在使用这两个接口时遇到问题,可以参考以下解释:
foreach ($table as $record)
(其中$table
是Person_List
的实例)时,current()
类的Person_List
方法将被调用(因为它是Iterator
接口 - see docs here)的一部分,它应该返回Person
类的对象;这应该发生在例如。 mysql_fetch_object()
; count($table)
(其中$table
是Person_List
的实例)时,Person_List
类的count()
方法将被调用,而{{1}}类将被调用可以使用例如。 mysql_num_rows()
function返回所有结果,而不是从数据库中提取它们然后计数(这将再次显着提高性能),答案 1 :(得分:0)
这实际上取决于你对记录的处理方式。访问记录中的列不应该更快(任何?)使用数组更快。不足以证明not using objects
的合理性数组比对象更轻(内存更小),但是如果你像@Tadeck那样使用Iterator
,那么这应该不是问题,因为你在内存中只有一个实例时间。
总之,对象几乎总是更好的设计(从界面的角度来看),但是,如果从性能角度来看不确定,那么对候选实现进行基准测试。如果差异不够明显,请使用对象。
答案 2 :(得分:0)
你标记了这个OOP,所以我猜你想要使用对象。在这种情况下,您希望让它返回PersonRow对象,例如表示db表中的行的对象。看看
你不应该担心性能。想出一个可读且可维护的坚固设计。只有在设计付诸行动时才会对性能感到烦恼,对其进行分析并发现它不符合性能要求。