对象和类结构,用于更大的PHP项目


Object and class structure for a larger project in PHP

我即将在PHP开始一个大项目。我希望代码尽可能干净,所以我已经开始学习编程类&对象。问题是,这是正确的结构吗?

我想的是三个主要的类。do, get, general

在一般情况下,我将有一个函数连接到数据库。在do中,我将存储插入或更新数据库的所有函数,例如:

class do
{
function createUser($name){
// Do stuff to create user
}
function like($id){
// Do stuff to like the id
}
}
$do = new do;
$do->like("52");
$do->createUser("Bob");

问题是,这是正确的方法吗?当doget中有超过20个函数时,这会不会变得草率?

提前感谢!

记住,一个对象代表一个事物,一个名词(类是事物的类型);"do"是一个动词,这是一个很大的线索,它不是一个很好的宾语选择。

实际上,在这里,它更像是一个"模糊操作函数"的命名空间,而不是"模糊检索函数"的"get"命名空间。名称空间也很酷,但它们应该是静态类,或者是实际的名称空间——你永远不需要引用一个名称空间的"实例",它们就在那里。

至于"一般",你永远不应该计划像这样包罗万象;这就像在开始之前放弃对代码进行分类一样。你以后可能会因为一些你实在放不下的东西而得到一个,但如果你这样做了,你应该真的很失望。

你在这里提到的代码中的对象可能是:
  • 数据库连接
  • 用户
  • 不管$id代表什么

注意最后一点:"ID"也不是一个东西,它是查找特定事物的标识符。

$do->like("52");中,$do"52"都没有任何实际意义。但是,如果"52"是页面的ID,并且用户正在点赞,那么(非常简单的)OO实现可能是这样的:

$page = Page::getByID("52");
$current_user->like( $page );

或者:

$page = Page::getByID("52");
$page->addLike( $current_user );

立即,代码变得更可读,对象之间的关系变得清晰。就是为什么OOP是如此流行的组织代码的范例。

我在这里坚持基本的内容来传达主要思想;一个现代的OOP框架在将事物转化为对象方面会比这更进一步;例如:

  • "工厂"answers"存储库"允许创建和加载/保存对象,而不需要静态getByID调用
  • 一个db连接对象将被传递给需要它的对象,而不是假设它们可以自己创建,这被称为"依赖注入"

我个人认为,类和对象是一个很好的选择。然而,您可能希望将"做"answers"得到"更改为"更改"answers"检索"或对您同样有意义的内容。使用关键字作为类名被认为是一种非常糟糕的做法。