Php 为什么全局变量不是';我认不出来?

Php 为什么全局变量不是';我认不出来?,php,object,global,Php,Object,Global,我想调用在代码中某个点定义的变量。我使用全局关键字,但似乎无法识别变量。当我在本地设置变量时,它工作得很好。(它是$title变量,它接收某个对象的静态函数的值) 这一个有效: class Book { public function represent() { $titles = Title::all_by_id(); $title = $titles[$this->title_id]; return $title->repr

我想调用在代码中某个点定义的变量。我使用全局关键字,但似乎无法识别变量。当我在本地设置变量时,它工作得很好。(它是$title变量,它接收某个对象的静态函数的值)

这一个有效:

class Book {
    public function represent() {
        $titles = Title::all_by_id();
        $title = $titles[$this->title_id];
        return $title->represent().'_'.$this->id;
    }
}
这个没有:

$titles = Title::all_by_id();
在另一个文件中

 class Book {
     public function represent(){
        global $titles;
        $title = $titles[$this->title_id];
        return $title->represent().'_'.$this->id;
     }
 }
它发送一个错误:

PHP致命错误:对中的非对象调用成员函数represente()


这里可能存在什么问题?

我解决了它,问题是我在主上下文的不同子上下文中设置了
$titles
变量,而不是在定义Book类的地方


当我改变定义变量的位置时,我解决了这个问题,我把它放在了主上下文中。

为什么要使用静态函数?当你在类外说
$titles
时,它是一个
变量
。当你在类中说
$titles
时,它是一个
属性
。类有一个作用域,作用域内的任何内容都可以被类使用。@Christian静态函数有什么问题?它从数据库加载所有标题,并将它们放在关联数组id=>object中,我更喜欢使用第二种方式,即全局方式,以避免多个数据库查询