2016-02-26 66 views
0

我环顾四周,但无法找到任何东西。我尝试使用全局,但我认为我错了。如何在不传递函数的情况下访问函数中的变量?

function testing() { 
    $a = (object) array('a' => 100, 'b' => 200); 
    function test2(){ 
     global $a; 
     var_dump($a); 
    } 
    test2(); 
} 
testing(); 

我希望能够在不传递变量作为参数的情况下获得$ test2()。编辑: 感谢您的意见和解答。然而,这个例子在我的具体情况下工作似乎并不奏效。我在我的视图顶部写了这个小函数,然后在需要时调用它。

var_dump($data); // DATA here is fine - I need it in the function 
function getDataVal($data_index) { 
    return (isset($data->{$data_index}))?$data->{$data_index}:''; 
} 

我那么晚了一点称它为页面上是这样的:

<input type="text" id="something" value="<?=getDataVal('something')?>" /> 

我知道我可以只通过$数据的请求,但是我希望有一个更简单的方法来访问该函数中的数据。

+0

因为变量不是全局命名空间,它在第一功能。在两个函数中定义它是全局的,或者查看下面的链接。 – Qirel

+3

看到这个职位:http://stackoverflow.com/questions/4938170/accessing-a-variable-defined-in-a-parent-function –

+0

在这两个函数中定义为全局 –

回答

1

全球的意思是 “全球性”,例如一个在全局命名空间中定义的变量。

我不知道为什么你试图避免传递变量作为参数。我的猜测是:它应该是可写的,而且通常不是。

这些都是同一个解决方案的两个变种:

<?php 


// VARIANT 1: Really globally defined variable 
$a = false; // namespace: global 

function testing1() { 
    global $a; 
    $a = (object) array('a' => 100, 'b' => 200); 

    function test1(){ 
     global $a; 
     echo '<pre>'; var_dump($a); echo '</pre>'; 
    } 
    test1(); 
} 
testing1(); 


// VARIANT 2: Passing variable, writeable 
function testing2() { 
    $a = (object) array('a' => 100, 'b' => 200); 

    function test2(&$a){ // &$a: pointer to variable, so it is writeable 
     echo '<pre>'; var_dump($a); echo '</pre>'; 
    } 
    test2($a); 
} 
testing2(); 


} 
testing(); 

结果,这两种型号:

object(stdClass)#1 (2) { 
    ["a"]=> int(100) 
    ["b"]=> int(200) 
} 

object(stdClass)#2 (2) { 
    ["a"]=> int(100) 
    ["b"]=> int(200) 
} 
+0

感谢您花时间回答我的问题。我更新了我的问题。 – Chris

0

把它定义为全局变量:

a = array(); 
    function testing() { 
     global $a; 
     $a = (object) array('a' => 100, 'b' => 200); 
     function test2(){ 
      global $a; 
      var_dump($a); 
     } 
     test2(); 
    } 

testing(); 

编辑缺少$在global a

相关问题