4

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

我曾经用最少的方法对所有的东西(用php)进行编程,只用最少的方法,根本没有类。那么方法中应该有多少,这些类应该在哪里?

示例: 我有 account.php,我想更新用户信息。那么在检查了有人发送了一些数据之后if(isset($_POST[..,接下来呢?我以前只是进行所有检查$email=CheckForRisksOrSomething($_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 应该保存在哪里?

因此,如果有人能给我一个如何构建以下功能的示例(在文件、类和可能的方法中)。

  • 用户(注册、登录、编辑帐户..)
  • 带有评论的图片
  • 新闻(也有评论)
  • 行政

这当然只是一个例子,但我不想继续我的烂摊子,然后在三天后看着它,只是捂着脸想知道我在那里写了什么。好吧,我今天已经这样做了,这就是我问的原因。


编辑24.2.2016

虽然这是一个老问题,但建议研究一个框架。虽然设置它可能需要一些时间,但它会提高开发速度,代码又好又干净,而且更安全。我个人使用 Laravel。

4

4 回答 4

3

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

Zend 的编码标准:如果您正在研究如何构建、命名等文件,那么我会看看 Zend 建议如何做这些事情。通过遵循他们的指导方针,您也可以使用这些相同的方法创建一个与其他人的代码兼容的包。

您要做的是专门为您的课程创建一个文件夹。你怎么知道你什么时候需要开设一个新课程,以及要包括什么?好问题!

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

例如,一个 User 类来处理您想要对站点用户进行的任何类型的更改。另一个例子是一个角色类,它可以根据他们是否是管理员来执行(或不执行)任务。对象和类的美妙之处在于您可以创建一个角色类的 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 撰写并由 Apress 出版的“PHP 5 对象、模式和实践”一书。这是一本让您深入了解 PHP 面向对象编程的精彩书籍!

于 2011-07-07T16:17:13.333 回答
1

很难告诉你应该怎么做。那里有许多不同的偏好。查看ZendKohanaCodeIgniter等框架。

当我使用 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) {
        ...
    }
}
于 2011-07-07T16:12:16.840 回答
0

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

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

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

对于您描述的项目,我很确定该框架将至少缩短您的时间 2 倍,同时您将解决上述所有问题。我从经验中知道这一点,很久以前从头开始开发项目。

于 2011-07-07T16:05:41.220 回答
0

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

于 2011-07-07T16:13:25.510 回答