2011-07-07 134 views
4

我开始制作一个网站,很快我发现我的代码很混乱。我一直在用PHP编程已经有一段时间了,从那时起我就学会了OOP。从这个角度来看,使用C#或java编写应用程序非常简单,但PHP给我带来了麻烦。PHP应用程序结构

我曾经用一行代码编写了所有的东西(在php中),只有最少量的方法和所有的类。 那么在方法中应该有多少,这些类应该在哪里?

例子: 我有account.php,我想更新用户信息。所以检查后有人发送了一些数据if(isset($_POST[..接下来是什么?我以前只是让 所有检查像$email=CheckForRisksOrSomething($_POST["email]);然后只是更新mysql。

这使我的问题,我应该创建一个类用户和它应该包含哪些方法呢?另外其中应该保存这个类,假设user.php会显示你的用户配置文件。

$smth = new Someclass(); 
if($smth->checkIfSaved()){ 
    $user = new User(); 
    $user->updateUser(/* all the $_POST stuff here? */); 
} else { 
    $smth->showUserDetailsForm(); 
} 

而且应该在哪里SomeClass的保存:

回应该是多少在课堂上,我应该只是在类似文件中使用?

所以,如果一个人会给我一个例子如何构建以下功能(在文件,类和可能的方法)。

  • 用户(注册,登录,修改账号..)
  • 图片与它的评论
  • 消息(也评论)
  • 管理

这只是一个例子当然,但我不想继续与我的混乱,然后看看它三天后,只是facepalm,想知道我在那里写什么。那么,我今天已经这样做了,这就是为什么我问。


编辑 2016年2月24日

尽管这是一个老问题,如建议寻找到一个框架。虽然它可能需要一点点设置它增加了开发速度,代码很好,干净,并且更安全。我个人使用Laravel。

+0

学习这个最好的方法是通过研究一些很好的现有web框架。 – webbiedave

+0

也许,但他们通常很大,你可能会很快迷路,忘记你在找什么。不过,你会建议我看看哪一个? –

+0

您可以查看大四:symfony,CakePHP,Zend Framework,CodeIgniter。除了OOP之外,他们还使用MVC架构模式。 – webbiedave

回答

3

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

Zend's Coding Standards:如果您正在研究如何构建,命名等文件,那么我会看看Zend如何建议做这些事情。按照他们的指导原则,您可以使用这些相同的方法创建与其他人的代码兼容的软件包。

你想要做的是为你的课程创建一个专门的文件夹。你怎么知道你什么时候需要创建一个新班级,以及包含什么内容?好问题!

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

例如,一个用户类,用于处理您要对网站用户进行的任何类型的更改。另一个例子是一个可以执行任务(或不执行)的Role类,取决于它们是否是管理员。关于Objects和Classes的好处是你可以在Role类中创建一个User :: $角色(在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 Objects,Patterns,and Practice”一书,并由Apress出版。这是一本很棒的书,可以帮助您将脚趾头浸入OOP中!

+0

另外,我想对上面的代码发表评论。 $ loggedInUser->基于角色> DeleteMessage可以();只有在User :: $角色被设置为公共而非私人的情况下才有效。我不希望有任何混淆,所以我将其设置为一个旁注:D很可能,您将保持User :: $角色为私有,并通过“getter”方法访问它,并通过有$ loggedInUser-> getRole() - > deleteMessage(); – anw

0

我的回答可能不会直接回答你的问题,但可能会让你很好。

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

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

我非常确定你所描述的这个项目会减少你的时间至少2次,同时你将会得到上面已经解决的所有问题。我从经验中了解到这一点,很久以前从头开始开发项目。

+0

我可能托盘你的建议,但我仍然想知道构建网站的最佳方式。 –

+1

那么,你需要一个MVC结构,检查Yii或CakePHP或CodeIgniter的结构,或者他们都拥有一个单一入口点(index.php文件)和结构像这样的美丽的东西:http:// www。 pleblanc.com/wp-content/uploads/2010/03/smvc-structure.png但他们也有自动加载等,这将使整个事情比你自己管理所有内容容易得多,可能是坏的而且更耗时的方式。 – ddinchev

+1

这是一篇关于如何自己构建非常简单的MVC框架的完整文章:http://www.pleblanc.com/2010/03/building-a-simple-mvc-framework/ – ddinchev

1

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

当我创建一个面向对象的设计较小的应用,我平时尽量遵循以下层次:

  • 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) { 
     ... 
    } 
} 
0

,如果你正在为网站,有您将开发一个MVC应用程序高的机会,最简单的MVC框架知道我是CodeIgniter。我会建议你使用它。