2017-05-30 106 views
0

的位置我已经在全球范围内 一些阵列让说PHP读取全局阵列

$t[0][1] = "a"; 

如何我从一个函数访问的位置?

function fc(){ 
    echo /* $t[0][1]*/ 
} 

我大约全局变量的一些文章去了,但我还没有找到一个解决方案,每一个指南是为单个变量

尝试:

echo $GLOBALS['t[0][1]']; 
echo $GLOBALS['t'][0][1]; 
echo $GLOBALS['t']['0']['1']; 

或尝试这种

$t[0][1] = "a"; 
function fc(){ 
    global $t 
    echo $t[0][1]; 
} 

并没有工作.... 任何帮助吗?

感谢提前:)

+0

你使用任何类型的框架?你也称为功能,对吧?! – Rizier123

+0

将它作为参数传递给 – Akintunde007

+0

作为参数传递: - https://stackoverflow.com/a/42393334/4248328 –

回答

2

你有两个选择,其中一个已经在通过@Akintunde的评论中提到。

把它作为一个参数:

function fc(&$arr) { 
    $arr[0] = 'test'; 
} 
fc($t); 
echo $t[0]; 

您已经提到了全球性的方法,这很可能是不工作由于:

function fc($arr) { 
    print_r($arr); 
} 
fc($t); 

如果您打算修改它,通过引用传递范围,请参阅:http://php.net/manual/en/language.variables.scope.php。但我无法强调这一点,应该不惜一切代价避免使用global$GLOBALS,这是一种可怕的编程习惯,会让你头痛不已。

使您的变量超出外部应用程序范围的另一种方法是将所有内容放入您自己的静态类中,这样可以防止意外变量重用。

class MyClass 
{ 
    private static $t = []; 

    public static function set($index, $value) 
    { 
    self::$t[$index] = $value; 
    } 

    public static function get($index) 
    { 
    return self::$t[$index]; 
    } 
} 

MyClass::set(0, 'test'); 
echo MyClass::get(0) . "\n"; 

如果你想确保你的类不与现有的类,命名空间冲突的:http://php.net/manual/en/language.namespaces.php

+0

副本:-https://stackoverflow.com/a/42393334/4248328 –

+0

我不是一个down-voter。我只是分享链接 –

+0

谢谢,这已经完成了它的魔力。使用&解决方案,效果很好:) – Zorak