PHP应用程序结构


PHP application structure

我开始做一个网站,很快我发现我的代码是一团糟。我用PHP编程已经有一段时间了,从那以后我学习了OOP。从这个角度来看,用c#或java编写应用程序很容易,但PHP却给我带来了麻烦。

我曾经用php从一行编程到另一行,用最少的方法,根本没有类。那么方法中应该包含多少内容,这些类应该放在哪里?

例子:我有帐户。php,我想更新用户信息。那么在检查某人发送了一些数据if(isset($_POST[..之后,下一步是什么?我以前只做所有的检查,如$email=CheckForRisksOrSomething($_POST["email]);,然后更新mysql。

这给我带来了一个问题,我是否应该创建一个类User,它应该包含什么方法?还有WHERE应该保存这个类,假设user.php会显示用户的配置文件。

回到类中应该有多少,我应该只在文件中使用:

$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文件夹中保存核心功能。
  • 此外,在classes目录中创建两个文件夹controllersmodels
  • 在我的项目中,我通常有另一个文件夹templates,我所有的html文件进去(然后用Smarty模板引擎渲染)。

这是一个非常简单的方法,但可以引导您走向正确的方向。对于您的需求,如用户,图片等,创建一个包含单个用户的所有数据的模型。

class UserModel() {
    public $name;
    public $email;
}

然后是一个可以修改这个模型的控制器:

class UserController() {
    public function update($user) {
        ...
    }
}

我的回答可能不能直接回答你的问题,但可能对你有很多好处。

使用真正的框架。不要从头开始用代码构建网站。它将为你节省大量的时间,并将迫使你使用代码分离的良好实践,真正好的和干净的项目结构,但再次强调,它将节省你的时间!对于你决定在那里实现的许多事情,将有一个现成的解决方案,你所做的常见事情(如验证电子邮件地址)将以正确的方式完成。

我会选择MVC PHP框架,在过去使用了很多CakePHP, Zend, Kohana和其他一些框架之后,我建议你选择Yii。非常小的学习曲线,很好的文档,很好的大型活跃社区,你可以在很短的时间内移植你已经拥有的任何东西。

我很确定,对于你所描述的项目,框架将至少节省你2倍的时间,同时你将已经解决你上面所要求的所有问题。我从自己的经验中了解到这一点,因为我很早以前就开始开发项目了。

如果你正在为web开发,你很有可能会开发一个MVC应用程序,我所知道的最简单的MVC框架是CodeIgniter。我建议你使用它