我开始做一个网站,很快我发现我的代码是一团糟。我用PHP编程已经有一段时间了,从那以后我学习了OOP。从这个角度来看,用c#或java编写应用程序很容易,但PHP却给我带来了麻烦。
我曾经用php从一行编程到另一行,用最少的方法,根本没有类。那么方法中应该包含多少内容,这些类应该放在哪里?
例子:我有帐户。php,我想更新用户信息。那么在检查某人发送了一些数据if(isset($_POST[..
之后,下一步是什么?我以前只做所有的检查,如$email=CheckForRisksOrSomething($_POST["email]);
,然后更新mysql。
回到类中应该有多少,我应该只在文件中使用:
$smth = new Someclass();
if($smth->checkIfSaved()){
$user = new User();
$user->updateUser(/* all the $_POST stuff here? */);
} else {
$smth->showUserDetailsForm();
}
Someclass应该保存在哪里?
因此,如果有人能给我一个如何构建以下功能的例子(在文件,类和可能的方法中)。
- 用户(注册、登录、编辑账号等)
- 图片附评论
- 新闻(附评论) 理>
这当然只是一个例子,但我不想继续我的混乱,然后三天后看着它,只是捂着脸,想知道我在那里写了什么。嗯,我今天已经做过了,所以我才问。
编辑 24.2.2016
虽然这是一个老问题,但建议查看框架。虽然它可能需要一点时间来设置它,但它提高了开发速度,代码很好,很干净,也更安全。我个人使用Laravel。
给这只猫剥皮的方法不止一种,但我将为你推荐一些有用的链接和书籍。
Zend的编码标准:如果你正在考虑如何组织、命名文件等,那么我会看看Zend建议如何做这些事情。通过遵循他们的指导方针,您也可以使用这些相同的方法创建一个与其他人的代码兼容的包。
你要做的是为你的类创建一个文件夹。您如何知道何时需要创建新类,以及需要包含哪些类?好问题!
如果你发现自己遇到了一组相关的信息,需要一起处理很多,或者解决一个特定的问题,你应该创建一个新的类来处理它。
例如,User类,用于处理您希望对站点的用户进行的任何类型的更改。另一个例子是Role类,它可以执行(或不执行)任务,这取决于它们是否是管理员。对象和类的奇妙之处在于,您可以创建一个User::$role(在User类中名为$role的变量),它是一个角色类。例如,你会在用户对象中有一个角色对象。从这里开始,您的用户对象现在可以通过执行以下操作来调用角色对象:
class User {
private $username;
private $role;
function __construct($username){
$this->username = $username;
}
public function setRole($roleType){
switch($roleType){
case "admin":
$this->role = new Admin(); // contained in another class file
break;
case "staff":
$this->role = new Staff(); // contained in another class file
break;
default:
$this->role = new Visitor(); // contained in another class file
} // end case
} // end setRole
} // end Class User
$loggedInUser = new User("Bubba");
$loggedInUser->setRole("admin");
$loggedInUser->role->deleteMessage();
一般来说,您将希望保持代码的结构化和分离,以便每个类只处理它应该拥有的信息,而不做任何超出它应该做的事情。如果您发现一个类做了太多的事情,这意味着您找到了创建另一个类来处理这个新职责的好时机。如何将它们联系在一起通常是一个用"设计模式"来回答的问题。有一本非常好的书,涵盖了使用对象和类进行编程,以及使用设计模式。
查看Matt Zandstra的《PHP 5对象、模式和实践》一书,这本书由Apress出版。这是一本让你尝试使用PHP进行OOP的好书!
很难告诉你该怎么做。有很多不同的偏好。看看Zend、Kohana、CodeIgniter等框架。
当我使用OOP设计创建较小的应用程序时,我通常尝试遵循以下层次结构:
-
index.php
中包含bootstrap.php
。 - 在
bootstrap.php
中包括所有类和配置。 - 创建
classes
目录,在core
文件夹中保存核心功能。 此外,在 - 在我的项目中,我通常有另一个文件夹
templates
,我所有的html文件进去(然后用Smarty模板引擎渲染)。
classes
目录中创建两个文件夹controllers
和models
。这是一个非常简单的方法,但可以引导您走向正确的方向。对于您的需求,如用户,图片等,创建一个包含单个用户的所有数据的模型。
class UserModel() {
public $name;
public $email;
}
然后是一个可以修改这个模型的控制器:
class UserController() {
public function update($user) {
...
}
}
我的回答可能不能直接回答你的问题,但可能对你有很多好处。
使用真正的框架。不要从头开始用代码构建网站。它将为你节省大量的时间,并将迫使你使用代码分离的良好实践,真正好的和干净的项目结构,但再次强调,它将节省你的时间!对于你决定在那里实现的许多事情,将有一个现成的解决方案,你所做的常见事情(如验证电子邮件地址)将以正确的方式完成。
我会选择MVC PHP框架,在过去使用了很多CakePHP, Zend, Kohana和其他一些框架之后,我建议你选择Yii。非常小的学习曲线,很好的文档,很好的大型活跃社区,你可以在很短的时间内移植你已经拥有的任何东西。
我很确定,对于你所描述的项目,框架将至少节省你2倍的时间,同时你将已经解决你上面所要求的所有问题。我从自己的经验中了解到这一点,因为我很早以前就开始开发项目了。
如果你正在为web开发,你很有可能会开发一个MVC应用程序,我所知道的最简单的MVC框架是CodeIgniter。我建议你使用它