我即将在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");
问题是,这是正确的方法吗?当do
或get
中有超过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"检索"或对您同样有意义的内容。使用关键字作为类名被认为是一种非常糟糕的做法。