获取一个对象到另一个
问题描述:
我有一个功能,谁得到的所有标签从数据库中,并将它们放入一个数组,但如果我把对象到另一个功能将是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);
}
答
这里有几个问题。首先,$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
正在访问一些尚未设置的东西。
答
看来这是一个来自PHP类的代码片段。如果将变量设置为$labels
它位于本地方法范围内,则不会被方法外部的任何内容看到,并会在方法结束后丢失。
要在对象实例上设置变量,请使用$this->labels = ...
和var_dump($this->labels)
,或者声明为静态,self::$labels
。
如果不是这种情况,那么忘掉static public private
关键字。函数仍然不会看到它们之外的任何东西,所以你有一个丑陋的选择,在方法前面加上global $labels
(因为这个原因karma会回来)或者通过&$labels
这两个方法传递$labels
bu。
将$标签作为参数传递给getLabel()否则它将不在范围内....这真的是一个PHP 101问题 - http://www.php.net/manual/en/language.variables .scope.php – 2013-05-03 19:51:53