【问题标题】:Require_once across different files, global scopeRequire_once 跨不同文件,全局范围
【发布时间】:2015-09-27 17:02:21
【问题描述】:
我已经学习 PHP 几天了,我遇到了一个奇怪的问题。我有两个文件:
login.php 存储数据库访问数据(用户、密码、主机、db)
security.php 具有操作字符串/查询以防止 sql/xss 注入的功能,还存储用于密码散列的盐前缀和后缀.
然后我有我的index.php、register.php 和signin.php。我的问题是:当我将require_once '../login.php'; 放入register.php 时,我通常可以调用像$var 这样的变量或函数。另一方面,signin.php 中完全相同的模式不起作用,PHP 告诉您未声明变量。我尝试这样做:global $var,它正在工作,但我觉得它完全不安全。
1) 解决这个问题的正确方法是什么?
2) 它与应用架构有关吗?
3) 所有使用db连接的函数(等等)都应该写在一个文件中吗?
【问题讨论】:
标签:
php
mysql
variables
scope
require-once
【解决方案1】:
Step 1 - 创建一个php文件,将所有数据库连接写入其中(example-db.php)
第 2 步 - 在您有数据库相关操作的任何地方都包含此 php (db.php)。
需要'db.php'; //在此处添加您的数据库php文件..
这将易于组织,并在您将应用程序从一台服务器迁移到另一台服务器时最大限度地减少错误
在 php 中有 require 和 include。 require 很好,因为如果文件不可用,它将停止执行代码。
这也很容易组织并最大限度地减少从一台服务器迁移到另一台服务器时引起的错误
【解决方案2】:
- 安装composer
- 将所有代码放入带有namespace 的类中的函数中(如果必须的话,作为静态函数)。
- 将psr4 中指定的类保存在lib 目录中。
- 按照 composer 网站上的说明创建 composer.json 文件,并将您的 lib 目录作为自动加载包含在 composer 文档中。
- require_once projectroot/vendor/autoload.php 在您的文件中。
调用你的类方法(带有命名空间)而不是函数。偷懒。避免 require/include 地狱。