我有一个函数可以从数据库中获取所有标签并将它们放入一个数组中,但如果我将该对象带到另一个函数,它将为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);
}
答案 0 :(得分:2)
这似乎是PHP类的代码片段。如果将变量设置为$labels
它位于本地方法范围内,则方法外的任何内容都不会看到该变量,并且在方法完成后会丢失。
要在对象实例上设置变量,请使用$this->labels = ...
和var_dump($this->labels)
,或者将其声明为静态self::$labels
。
如果情况并非如此,那么请忘记static public private
个关键字。函数仍然没有看到它们之外的任何东西,所以你有一个丑陋的选择,即在方法前面添加global $labels
(业力会为此回复你)或者将$labels
bu引用传递给它们方法为&$labels
。
答案 1 :(得分: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
正在访问尚未设置的内容。