2013-03-06 68 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