跨文件PHP变量?
我有一堆数据库地址和其他随机长字符串,我必须在我的网站上一遍又一遍地输入到函数中。有没有一种方法可以在PHP中生成大量在当前PHP安装的任何文件上都有效的永久性全局变量跨文件PHP变量?,php,Php,我有一堆数据库地址和其他随机长字符串,我必须在我的网站上一遍又一遍地输入到函数中。有没有一种方法可以在PHP中生成大量在当前PHP安装的任何文件上都有效的永久性全局变量 或者我应该创建一个定义了所有变量的vars.php,并始终包含该文件吗?答案是,两者都有!使用prepend 答案是,两者都有!使用prepend 使用所需的设置创建文件。大概是这样的: <?php // My file name might be config.php $config = array(
或者我应该创建一个定义了所有变量的vars.php,并始终包含该文件吗?答案是,两者都有!使用prepend
答案是,两者都有!使用prepend
使用所需的设置创建文件。大概是这样的:
<?php
// My file name might be config.php
$config = array(
'db.connection' => 'localhost:3306'
// etc...
);
?>
然后将它包含到每个需要它的页面/文件中
<?php
require("path-to/config.php");
// Other stuff this file does/needs
?>
使用所需的设置创建文件。大概是这样的:
<?php
// My file name might be config.php
$config = array(
'db.connection' => 'localhost:3306'
// etc...
);
?>
然后将它包含到每个需要它的页面/文件中
<?php
require("path-to/config.php");
// Other stuff this file does/needs
?>
您可以使用$GLOBALS变量,该变量还包含其他超全局变量,如$\u GET、$\u POST等。当然,这意味着您仍然应该始终包括定义自己的自定义变量的文件 使用$GLOBALS的好处是,您可以在所有范围内使用它,至少可以将它用作一种名称空间技术 例如,如果您使用
$settings = array('host' => 'localhost');
function connect() {
global $settings;
}
您可能会在某个时候无意中重写$SETING变量。当使用$GLOBALS时,我认为这种情况不太可能发生
$GLOBALS['_SETTINGS'] = array(... => ...);
function connect() {
$settings = $GLOBALS['_SETTINGS'];
}
另一个解决方案是使用您自己的自定义类,您可以在其中将设置存储在静态数组中。同样,这需要包含文件,您可以在其中定义类,但是您的数据在所有范围内都是可访问的,并且不能被强制重写
例如:
class MySettings {
private static $settings = array(
'host' => 'localhost',
'user' => 'root'
);
public static get($key) {
return self::$settings[$key];
}
}
function connect() {
$host = MySettings::get('host');
...
}
不是说这是最好的方法,但肯定是实现目标的一种方法。您可以使用$GLOBALS变量,它还包含其他超全局变量,如$\u GET、$\u POST等。当然,这意味着您仍然应该在定义自己的自定义变量时始终包含文件 使用$GLOBALS的好处是,您可以在所有范围内使用它,至少可以将它用作一种名称空间技术 例如,如果您使用
$settings = array('host' => 'localhost');
function connect() {
global $settings;
}
您可能会在某个时候无意中重写$SETING变量。当使用$GLOBALS时,我认为这种情况不太可能发生
$GLOBALS['_SETTINGS'] = array(... => ...);
function connect() {
$settings = $GLOBALS['_SETTINGS'];
}
另一个解决方案是使用您自己的自定义类,您可以在其中将设置存储在静态数组中。同样,这需要包含文件,您可以在其中定义类,但是您的数据在所有范围内都是可访问的,并且不能被强制重写
例如:
class MySettings {
private static $settings = array(
'host' => 'localhost',
'user' => 'root'
);
public static get($key) {
return self::$settings[$key];
}
}
function connect() {
$host = MySettings::get('host');
...
}
不是说这是最好的方法,但肯定是实现目标的一种方法。你可能指的是全局常量。你可能指的是全局常量。如果可能的话,最好在你的答案中用一些代码总结一下这项技术。请远离像这样的INI设置。只需在每个需要它的文件上使用
require
或include
。我认为没有理由不使用auto\u prepend\u文件。它通常用于会话或OP要求的确切目的。我个人并不使用它,但我看不出为什么反复使用require()或include()是更好的做法。顺便说一句,OP,auto_prepend_file调用诸如require()和not include()之类的函数,这意味着如果找不到该文件,脚本将崩溃。因为它是明确的,并且很容易从代码中查找/读取。使用INI设置意味着除了代码之外,还需要读取/查找服务器配置。如果可能的话,最好在您的答案中的一些代码中总结该技术。单击,请远离这样的INI设置。只需在每个需要它的文件上使用require
或include
。我认为没有理由不使用auto\u prepend\u文件。它通常用于会话或OP要求的确切目的。我个人并不使用它,但我看不出为什么反复使用require()或include()是更好的做法。顺便说一句,OP,auto_prepend_file调用诸如require()和not include()之类的函数,这意味着如果找不到该文件,脚本将崩溃。因为它是明确的,并且很容易从代码中查找/读取。使用INI设置意味着除了代码之外,还需要读取/查找服务器配置。我会使用require_once(“file.php”):+1除非我同意koz先生的意见,否则您应该使用require_once
@mister,@andrew:除非导入类,否则我不会require_once
。考虑到这个实例,开销是不必要的,因为这些值应该是不可更改的配置值。导入agian不会伤害任何东西。除非它是一个包含常量、类、函数的文件,或者任何其他在多次声明时会导致死亡的文件。我会使用require_once(“file.php”):)+1除非我同意koz先生的意见,否则你应该使用require_once
@mister,@andrew:除非我导入一个类,否则我不会require_once
。考虑到这个实例,开销是不必要的,因为这些值应该是不可更改的配置值。导入agian不会损害任何东西。除非它是一个常量、类、函数或任何其他文件,在多次声明时会导致死亡。