2013-03-06 62 views
0

我在读取另一个函数中一个函数中定义的变量时遇到问题。 我有:类和函数内部的全局变量PHP

global $a; 
class test{ 
    function aa($somevar){ 
     switch ($myvar){ 
     case 'value': 
      global $a; 
      $a = 15; 
      break; 
     } 
    } 
    function bb(){ 
     global $a; 
     echo $a; 
    } 
} 

$foo = new test(); 
$ccc = $foo->bb(); 

var_dump($ccc); 

我得到转储结果NULL。 感谢名单

+0

但你无处值分配给'$ aa'。 – Voitcus 2013-03-06 14:40:01

+1

在此代码的流程中,没有任何值被分配给$ a; bb()返回没有分配给$ ccc; aa()打开一个不存在的变量;你应该尽可能地避免使用全局变量 – 2013-03-06 14:41:23

+0

你为什么要使用全局变量而不是类成员? – prodigitalson 2013-03-06 14:42:53

回答

0

内部在你的代码,你值赋给$a没有意义的。

$a的唯一赋值是test->aa方法,该方法使用不一致的变量,因此即使调用永远不会分配给$a

0

您从不运行test->aa()a赋值。

$foo = new test(); 
$foo->aa(); 
$ccc = $foo->bb(); 

在这种情况下$ccc仍然将是无效的,因为你是在$foo->bb()呼应$a而不是返回它。

function bb() { 
    global $a; 
    return $a; 
} 

我也会远离全局变量,并在类的构造上传递变量$ a。例如:

class test { 
    public $a; 

    function __construct($a = null) { 
     // pass initial var to $a if you want 
     $this->a = $a; 
    } 

    function aa($somevar) { 
     // reassign $a 
     $this->a = $somevar; 
    } 
} 

$foo = new test(); 
$foo->aa(5); 
// or just $foo = new test(5); 
var_dump($foo->a); 
0

试试这个:

class test 
{ 
    public $a; 
    function aa($somevar) 
    { 
     switch ($myvar) 
     { 
     case 'value': 
     $this->a = 15; 
     break; 
     } 
    } 
    function bb() 
    {   
     return $this->a; 
    } 
} 

$foo = new test(); 
$ccc = $foo->bb(); 

var_dump($ccc); 

更新:

<?php 
class test 
{ 
    var $a; 
    function aa($somevar) 
    { 
     switch ($somevar) 
     { 
     case 'value': 
     $this->a = 15; 
     break; 
     } 
    } 
    function bb() 
    {   
     return $this->a; 
    } 
} 

$foo = new test(); 
$foo->aa('value'); 
$ccc = $foo->bb(); 

var_dump($ccc); 
?> 
+1

+1用于删除全局变量。 -2不解决初始问题($ ccc仍为空)。 'test-> bb'必须返回'test-> a'。 – Sam 2013-03-06 14:51:26

+0

仍然null:( – user1756097 2013-03-06 14:51:41

+0

@ user1756097:请检查更新后的答案。 – kwelsan 2013-03-06 15:05:28

0

下面是代码试试这个..

<?php 
global $a; 
    class test{ 

    function aa($somevar){ 
     switch ($somevar){ 
     case 'value': 
      global $a; 
      $a = 15; 
      break; 
     } 
    } 

function bb(){ 
    global $a; 
    echo $a; 
    return $a; 
} 
} 

$foo = new test(); 
$foo->aa('value'); 
$ccc = $foo->bb(); 

var_dump($ccc); 


?> 
+0

不可能,因为函数和开关中的变量不相同 – user1756097 2013-03-06 20:12:58