这是正确使用auto_prepend_file

时间:2013-06-10 17:03:16

标签: php

从头开始构建我的第一个PHP应用程序。所以请原谅这个菜鸟问题。

使用auto_prepend_file来管理公共变量(如默认数据库连接或运行session_start())是否合适?还是有更好的方法来定义“应用程序”变量并为每个页面添加会话管理?

我问,因为我在使用include中定义的变量时遇到了netbeans的警告。搜索谷歌我看到一些帖子说明在包含中定义变量是不好的做法;那么PHP中的好习惯是什么?

由于

1 个答案:

答案 0 :(得分:2)

大多数现代php应用程序布局都没有在代码中加载所需的资源。

相反,最常见的是autloader解析所请求的资源(类名)并加载正确的文件。然后大多数事情被封装在对象和类中。

现在最常见的标准是PSR-0

配置主要存储在各种格式的配置文件中,如xml。然后经常会有一个用于读取这些配置的对象。然后,从该对象获取配置以在某些地方使用,例如数据库连接。

那些被执行的东西大部分都没有在代码中执行,而是通过将自己附加到程序中的某些点来执行自己。

大多数php框架都有一个名为“hooks”或“events”的东西。基本上它只是一个带有事件名称的简单列表,每个条目都有一个应该执行的函数列表。

当代码的某些部分“触发”时,它使用一个辅助类来遍历列表的条目并执行它们。

你问自己,你不能在那里有循环吗?答案很简单,是的。

所有这些内容背后的全部理念是,如果您想将新代码添加到应用程序中,则必须在任何地方不更改现有代码。

这是好习惯吗?老实说,我不知道。

如果某个项目超过一定规模并且有多人正在编程,则可能需要一些标准。不修改现有代码的方式在实践中证明是好的。

关于auto_prepend_file,这是我不会做的事情。

如果我没别办,我可以这样做。例如,如果我想执行一些代码来保护我的应用程序免受ddos或安全注入。我只是不想弄乱应用程序本身。

但如果我从一开始就设计一些东西,我就不会这样做。

为什么呢?也许我想切换到新的网络服务器,甚至在命令行中执行我的程序。如果我在apache中定义了自动预置,那么我就会遇到问题...

或许我有一些我根本不想要的代码?我的应用程序中只有一个文件,我不想要它,因为我不需要它,它占用资源或存在安全风险?

我经常在建立链接的函数中编写一个应用程序,例如数据库用户名和密码。

为什么呢?为什么不?因为我不想在全球范围内提供它。如果它在功能代码中,则更难以访问其他可能不安全的代码。

最常见的意思是拥有一个配置文件,只需要在应用程序的某个地方使用它。

此外,大多数现代应用程序没有由Web服务器加载的不同php文件,因此不需要在多个位置使用相同的代码。

相反,大多数现代应用程序都有一个php文件(主要是index.php),它充当所谓的“bootstrap”文件。 Web服务器会将每个请求重写为对图像等静态资源的请求,而其他所有请求(如决定查看请求的URL时要显示的内容)都会在应用程序中处理。