Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP应用程序结构_Php_Code Structure - Fatal编程技术网

PHP应用程序结构

PHP应用程序结构,php,code-structure,Php,Code Structure,我开始创建一个网站,很快我发现我的代码乱七八糟。我已经有一段时间没有用PHP编程了,从那以后我学习了OOP。现在,从这个角度来看,用C#或java开发应用程序非常容易,但PHP给我带来了麻烦 我过去常常(用php)从一行编程到另一行,使用最少的方法,而且根本没有类那么在方法中应该有多少,这些类应该在哪里? 示例: 我有account.php,我想更新用户信息。因此,在检查某人是否发送了一些数据后,我通常只会 所有的检查,比如$email=CheckForRisksOrSomething($\u

我开始创建一个网站,很快我发现我的代码乱七八糟。我已经有一段时间没有用PHP编程了,从那以后我学习了OOP。现在,从这个角度来看,用C#或java开发应用程序非常容易,但PHP给我带来了麻烦

我过去常常(用php)从一行编程到另一行,使用最少的方法,而且根本没有类那么在方法中应该有多少,这些类应该在哪里?

示例: 我有account.php,我想更新用户信息。因此,在检查某人是否发送了一些数据后,我通常只会 所有的检查,比如
$email=CheckForRisksOrSomething($\u POST[“email]);
,然后更新mysql

这就引出了一个问题,我应该创建一个类User吗?它应该包含什么方法?假设User.php会显示用户的配置文件,那么这个类应该保存在哪里

回到类中应该包含多少,我是否应该在如下文件中使用:

$smth = new Someclass();
if($smth->checkIfSaved()){
    $user = new User();
    $user->updateUser(/* all the $_POST stuff here? */); 
} else {
    $smth->showUserDetailsForm();
}
还有,Someclass应该保存在哪里

因此,如果ayone能给我举个例子,说明如何构造以下功能(在文件、类和可能的方法中)

  • 用户(注册、登录、编辑帐户..)
  • 有评论的图片
  • 新闻(附评论)
  • 管理
当然,这只是一个例子,但我不想继续我的混乱,三天后再看它,只是想知道我在那里写了什么。好吧,我今天已经写了,这就是为什么我要问


编辑2016年2月24日


虽然这是一个老问题,但正如建议的那样,请查看一个框架。虽然设置它可能需要一点时间,但它可以提高开发速度,代码很好、干净,而且更安全。我个人使用Laravel。

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

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

我会使用MVC PHP框架,在过去使用了很多CakePHP、Zend、Kohana和其他一些框架之后,我建议您使用Yii。非常小的学习曲线、漂亮的文档、漂亮的大型活动社区,您将能够在很短的时间内将您已经拥有的一切移植到它


我敢肯定,对于您描述的项目,该框架将至少缩短您的时间2倍,同时您将解决上面所要求的所有问题。我从经验中了解到这一点,很久以前,我从零开始开发项目。

很难告诉您应该如何做到这一点。有许多不同之处不同的首选项。看看像、、之类的框架

当我使用OOP设计创建较小的应用程序时,我通常尝试遵循以下层次结构:

  • index.php
    中包括
    bootstrap.php
  • bootstrap.php
    中,包含所有类和配置
  • 制作一个
    classes
    目录,您可以将核心功能保存在
    core
    文件夹中
  • 此外,在
    classes
    目录中创建两个文件夹
    controllers
    models
  • 在我的项目中,我通常有另一个文件夹
    templates
    ,我的所有html文件都放在那里(然后用Smarty模板引擎渲染)
这是一种非常简单的方法,但可以引导您走向正确的方向。对于用户、图片等需求,创建一个包含单个用户所有数据的模型

class UserModel() {
    public $name;
    public $email;
}
然后是可以修改此模型的控制器:

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

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

给这只猫剥皮的方法不止一种,但我会为你推荐一些有用的链接和书籍

如果您正在研究如何构造、命名等文件,那么我将研究Zend建议如何执行这些操作。通过遵循他们的指导原则,您也可以使用这些相同的方法创建一个与其他人的代码兼容的包

你要做的是为你的类创建一个专门的文件夹。你如何知道什么时候需要创建一个新类,以及包含什么?好问题

如果您发现自己遇到了一组相关的、需要一起处理的信息,或者解决了一个特定的问题,那么您应该创建一个新的类来处理它

例如,一个用户类,用于处理您希望对站点用户所做的任何类型的更改。另一个示例是一个角色类,它可以执行任务(或不执行任务),这取决于他们是否是管理员。对象和类的奇妙之处在于,您可以创建一个用户::$Role(用户类中名为$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();
一般来说,您希望保持代码的结构化和独立性,以便每个类只处理它应该拥有的信息,而不做任何超出它应该做的事情。如果您发现一个类做了太多的事情,这意味着您找到了一个很好的时机来创建另一个类来处理这个新的职责。您如何将它们联系在一起是通用的ally机智地回答了一个问题