从功能中加入全球定义的数据 - 最佳实践,专有技术



我刚刚开始在PHP中进行编码,而我真的很困惑的是全局变量 - 除非我带上它们,否则我似乎无法访问全局变量/常数达到数据函数的特定范围和修改全球范围似乎根本不起作用。为什么?

我知道全局变量的一般缺点,但是在我的用户酶中(存储一些字面上对整个脚本在任何给定时间工作>的阵列的阵列和数组,这似乎是很有趣的,可以像读取数据一样有趣从文件或数据库中,它不会保存任何资源或帮助避免错误,我猜想它实际上会使它更长,更渴望的资源,以便进行56个调用以读取包含2个字符串的文件,而不是在RAM中寻找它。在每个功能中对它们进行硬编码似乎是一场噩梦,以便在任何更改的情况下进行编辑。我应该怎么做才能访问/修改全局数据并在不同函数(例如在C或JS中)共享它?根据给定的参数提供数据,将更多的RAM和CPU消耗,不是吗?)

接近问题时我正在开发的脚本如下:

<?php
static $client_id = "?&client_id=numbersAndStuff&callback=";
static $source  = "https://api.twitch.tv/kraken/streams/";
static $source2 = "https://api.twitch.tv/kraken/users/";
static $direc = "/home/tybin/public_html/assets/data/twitch/";
$nicks = array();
$activityData;
$imageData;
function getNicknames()
    {
        global $direc,$nicks;
        $loc_direc = $direc;
        $fn = $loc_direc . "nicks.txt"; //works fine, not sure if 
        //its being done properly though
        $fileHandle = fopen($fn,r) or die ("Unable to load nicks.txt!");
        foreach(fgets($fileHandle) as $nick)
        {
            $loc_nicks = $nick;
            $nicks[] = $loc_nicks;
        }
        var_dump($nicks);
    }
//...20 other functions making use of data stored in nicks[] that I try to properly 
//initalise and directories to work in/get data from.

php文件仅在明确执行时执行,否则将完全忽略(例如,与C中不同)。因此,您可能应该将全局内容放入保留的文件中该目的,然后在需要的任何地方使用require_once()之类的东西。将访问全局的访问纳入函数也可能是有意义的,这样您就可以更轻松地更轻松地更改实现。P>

// globals.php:
<?php
// define is best for true constants.. maybe move this into a config.php..
define('CLIENT_ID', '?&client_id=numbersAndStuff&callback=');
define('STREAMS_SOURCE', 'https://api.twitch.tv/kraken/streams/');
define('USERS_SOURCE', 'https://api.twitch.tv/kraken/users/');
define('DIREC', '/home/tybin/public_html/assets/data/twitch/);
function getNicknames() {
    static $nicks = false;
    if (!is_array($nicks)) {
        $nicks = array();
        // load the data as before
    }
    return $nicks
}

,然后在其他地方:

<?php
require_once('globals.php');
$nicks = getNicknames();
var_dump($nicks);

如果将数据包裹在这样的函数中,也可以使用static,避免污染全局名称空间。