繁体   English   中英

PHP包括vs OOP

[英]PHP includes vs OOP

我想在开发PHP应用程序时参考使用包含文件与对象(类)的优缺点。

我知道我可以从一个地方获得这个答案中受益...我对自己有一些看法,但我期待听到别人的意见。

一个简单的例子:

我的网站上的某些页面只能由登录用户访问。 我有两个实现选项(还有其他选项,但我们将它限制为这两个选项)

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

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

编辑我想看看某种方式权衡一方的优势。 我目前(和弱的理由)遵循:

包含 - 有时一个函数更容易/更短/更快地调用对象 - 功能和属性的分组导致长期维护。

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

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

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

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

这些并非真正相反的选择。 无论如何,您必须包含检查代码。 我把你的问题看作是程序编程与OO编程。

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

但是,维护和修改并不容易,因为许多开发人员都可以确认。

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

虽然问题触及了几个非常有争议的问题(OOP,用户身份验证),但我会跳过这些以及第二个Konrad关于__autoload的评论。 任何了解C / C ++的人都知道包括文件在内的多少痛苦。 使用自动加载,PHP5添加,如果您选择使用OOP(我几乎专门做),您只需要使用一些标准文件命名约定(我建议)限制每个文件的单个类,PHP将为您完成剩下的工作。 清理代码,您不必再担心要记住删除不再需要的包含(包含的许多问题之一)。

虽然我在目前的工作中使用它,但我没有太多的PHP经验。 总的来说,我发现大型系统受益于OO提供的可读性和可理解性。 但是一致性(不要混合OO和非OO)和你的个人偏好(尽管只是真正用于个人项目)这样的事情也很重要。

我已经学会了从不在PHP中使用include ,除了我使用的核心库以及应用程序中的这些库(+ config)的一个中心include 其他所有内容都由全局__autoload处理程序处理,该处理程序可以配置为识别所需的不同类。 这可以使用适当的类命名约定轻松完成。

这不仅灵活,而且非常有效,并保持架构清洁。

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

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

无论您是在课堂上还是以更多程序的方式进行,您只需要检查以确保:

  1. 有一个会议;
  2. 会话有效; 和,
  3. 拥有会话的用户具有适当的权限。

您可以将所有三个步骤封装到一个函数中(或者Session类中的静态方法可能有效)。 试试这个:

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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM