2013-05-03 114 views
0

我有一个功能,谁得到的所有标签从数据库中,并将它们放入一个数组,但如果我把对象到另一个功能将是NULL获取一个对象到另一个

private static $labels='blaat'; 

public function loadDatabaseLabels(){ 
    $res=DB::query("SELECT * FROM labels"); 
    $label_array=array(); 
    while($row=mysqli_fetch_assoc($res)){ 
     $label_array[$row['indicator']]=$row['text']; 
    } 
    $labels = new label(); 
    $labels->labels=$label_array; 
} 

public function getLabel($indicator){ 
    var_dump($labels->label); 
} 
+1

将$标签作为参数传递给getLabel()否则它将不在范围内....这真的是一个PHP 101问题 - http://www.php.net/manual/en/language.variables .scope.php – 2013-05-03 19:51:53

回答

0

这里有几个问题。首先,$labels声明private static - 这意味着访问它,你会做这样使用self::$labels

// set like this: 
self::$labels->labels = $labels_array; 

public function getLabel($indicator){ 
    var_dump(self::$labels->label); 
} 

其次,你不设置self::$lables->label,但self::$labels->labels(注意是复数标签)。所以在上面的函数中,var_dump正在访问一些尚未设置的东西。

2

看来这是一个来自PHP类的代码片段。如果将变量设置为$labels它位于本地方法范围内,则不会被方法外部的任何内容看到,并会在方法结束后丢失。

要在对象实例上设置变量,请使用$this->labels = ...var_dump($this->labels),或者声明为静态,self::$labels

如果不是这种情况,那么忘掉static public private关键字。函数仍然不会看到它们之外的任何东西,所以你有一个丑陋的选择,在方法前面加上global $labels(因为这个原因karma会回来)或者通过&$labels这两个方法传递$labelsbu。

+0

如果我使用这个我得到这个错误: 当不在对象上下文中时使用$ this在 – Rickert 2013-05-03 20:03:25

+0

中声明一个函数为'public'意味着它存在于一个类中 - 否则你使用'static',''公众“等不正确。 – Jon 2013-05-03 20:08:06

相关问题