PHP包括vs OOP

PHP包括vs OOP,php,coding-style,Php,Coding Style,在开发PHP应用程序时,我想参考一下使用include文件与对象(类)的优缺点 我知道我会受益于有一个地方去寻找这个答案…我有一些自己的意见,但我期待听到其他人 一个简单的例子: 我的站点上的某些页面仅可供登录用户访问。我有两个实现选项(还有其他选项,但我们仅限于这两个) 创建一个authenticate.php文件,并将其包含在每个页面上。它包含身份验证的逻辑 创建一个具有身份验证功能的用户对象,在每个页面上引用该对象进行身份验证 编辑 我想看看如何权衡两者的好处。 我目前(和薄弱的原因)如下

在开发PHP应用程序时,我想参考一下使用include文件与对象(类)的优缺点

我知道我会受益于有一个地方去寻找这个答案…我有一些自己的意见,但我期待听到其他人

一个简单的例子:

我的站点上的某些页面仅可供登录用户访问。我有两个实现选项(还有其他选项,但我们仅限于这两个)

  • 创建一个authenticate.php文件,并将其包含在每个页面上。它包含身份验证的逻辑

  • 创建一个具有身份验证功能的用户对象,在每个页面上引用该对象进行身份验证

  • 编辑 我想看看如何权衡两者的好处。 我目前(和薄弱的原因)如下:

    Includes—有时函数调用起来更容易/更短/更快 对象-对功能和属性进行分组,以便进行长期维护

    包括-要编写的代码更少(没有构造函数,没有类语法)称我懒惰,但这是真的

    对象-强制形式化和单一的功能和创建方法

    包括-新手更容易处理 对象-新手更难,但专业人士不喜欢

    在项目开始时,我会查看这些因素,以决定是否要执行包含或对象。
    这些都是我头脑中的一些优点和缺点。

    我没有多少PHP经验,尽管我在目前的工作中使用它。一般来说,我发现大型系统受益于OO提供的可读性和可理解性。但是,一致性(不要将面向对象和非面向对象混为一谈)以及您的个人偏好(尽管仅限于个人项目)也很重要。

    您能更具体一点吗?对于您给出的示例,您需要以两种方式使用include。 在案例1中,您只包含一个文件,在案例2中,您需要包含类文件(例如user.class.php),以允许实例化用户类


    这取决于应用程序的其余部分是如何构建的,是OO吗?使用OO。

    我学会了在PHP中永远不要使用
    include
    ,除了在我使用的核心库中,还有一个中央
    include
    库(+config)在应用程序中。其他一切都由全局
    \uuu autoload
    处理程序处理,该处理程序可以配置为识别所需的不同类。使用适当的类命名约定可以很容易地做到这一点


    这不仅灵活,而且非常有效,并保持体系结构干净。

    无论您是在类中还是在更程序化的风格中执行,您只需检查以确保:

  • 有一个会议
  • 会议有效;以及
  • 拥有会话的用户具有适当的权限
  • 您可以将所有三个步骤封装到一个函数中(或者会话类中的静态方法也可以工作)。试试这个:

    class Session
    {
      const GUEST = 0;
      const SUBSCRIBER = 1;
      const ADMINISTRATOR = 2;
    
      public static function Type()
      {
        session_start();
    
        // Depending on how you use sessions on
        // your site, you might just check for the
        // existence of PHPSESSID. If you track
        // every visitor with sessions, however, you
        // might want to assign some separate unique
        // number (that you can track in a DB) to
        // authenticated sessions
        if(!$_SESSION['uniqid'])
        {
          return Session::GUEST;
        }
        else
        {
          // For the best security, don't store the
          // user's access permissions in the $_SESSION,
          // but rather check against the DB. This will
          // ensure that recently deleted or downgraded
          // administrators will not be able to make use
          // of a previous session.
    
          return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
        }
      } 
    }
    
    
    // In your files that need to check for authentication (you
    // could also do this in a controller if you're going MVC
    
    if(!(Session::Type() == Session::ADMINISTRATOR))
    {
      // Redirect them to wherever you want them to go instead,
      // like a log in page or something like that.
    }
    

    这些并不是真正相反的选择。无论如何,您都必须包含检查代码。我把你的问题理解为过程编程和面向对象编程

    在PHP3或PHP4中,编写几行代码或一个函数,并将其包含在页眉中是如何完成的。它很简单,很有效(例如,我们在一个电子商务PHP应用程序中就是这样做的)

    但正如许多开发人员所证实的那样,维护和修改并不容易


    在PHP5中,您将编写一个用户对象,它将携带自己的数据和身份验证方法。您的代码将更清晰、更易于维护,因为与用户和身份验证相关的所有内容都将集中在一个地方。

    当问题涉及到一些非常有争议的问题(OOP,用户身份验证)时,我将跳过这些问题,然后再看康拉德关于“自动加载”的评论。任何了解C/C++的人都知道包括文件在内会有多痛苦。对于PHP5添加的autoload,如果您选择使用OOP(我几乎完全这样做),您只需要使用一些标准的文件命名约定,并且(我建议)限制每个文件一个类,PHP将为您完成其余的工作。清理代码,您就不必再担心删除不再需要的包含(包含的许多问题之一)