PHP包括vs OOP
在开发PHP应用程序时,我想参考一下使用include文件与对象(类)的优缺点 我知道我会受益于有一个地方去寻找这个答案…我有一些自己的意见,但我期待听到其他人 一个简单的例子: 我的站点上的某些页面仅可供登录用户访问。我有两个实现选项(还有其他选项,但我们仅限于这两个)PHP包括vs OOP,php,coding-style,Php,Coding Style,在开发PHP应用程序时,我想参考一下使用include文件与对象(类)的优缺点 我知道我会受益于有一个地方去寻找这个答案…我有一些自己的意见,但我期待听到其他人 一个简单的例子: 我的站点上的某些页面仅可供登录用户访问。我有两个实现选项(还有其他选项,但我们仅限于这两个) 创建一个authenticate.php文件,并将其包含在每个页面上。它包含身份验证的逻辑 创建一个具有身份验证功能的用户对象,在每个页面上引用该对象进行身份验证 编辑 我想看看如何权衡两者的好处。 我目前(和薄弱的原因)如下
这些都是我头脑中的一些优点和缺点。我没有多少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将为您完成其余的工作。清理代码,您就不必再担心删除不再需要的包含(包含的许多问题之一)