Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨文件PHP变量?_Php - Fatal编程技术网

跨文件PHP变量?

跨文件PHP变量?,php,Php,我有一堆数据库地址和其他随机长字符串,我必须在我的网站上一遍又一遍地输入到函数中。有没有一种方法可以在PHP中生成大量在当前PHP安装的任何文件上都有效的永久性全局变量 或者我应该创建一个定义了所有变量的vars.php,并始终包含该文件吗?答案是,两者都有!使用prepend 答案是,两者都有!使用prepend 使用所需的设置创建文件。大概是这样的: <?php // My file name might be config.php $config = array(

我有一堆数据库地址和其他随机长字符串,我必须在我的网站上一遍又一遍地输入到函数中。有没有一种方法可以在PHP中生成大量在当前PHP安装的任何文件上都有效的永久性全局变量


或者我应该创建一个定义了所有变量的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不会损害任何东西。除非它是一个常量、类、函数或任何其他文件,在多次声明时会导致死亡。