这个PHP静态方法有什么问题?
我在class这个PHP静态方法有什么问题?,php,static,static-methods,Php,Static,Static Methods,我在classcategory public static function getPrefixFromSubCategoyId($subCategoryId) { $prefix = $this->fetch(array('table' => 'subCategories', 'id' => $subCategoryId)); return $prefix[0]['prefix']; } 我确信我使用的代码是正确的,因为当我在类范围外使用相同的代码时,它会正
category
public static function getPrefixFromSubCategoyId($subCategoryId) {
$prefix = $this->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
return $prefix[0]['prefix'];
}
我确信我使用的代码是正确的,因为当我在类范围外使用相同的代码时,它会正常工作
$category = new Category($dbh);
$subCategoryId = 6;
$prefix = $category->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
echo $prefix[0]['prefix'];
但是当我用以下语法初始化静态方法时
$prefix = Category::getPrefixFromSubCategoyId(4);
它给了我以下的错误
Fatal error: Using $this when not in object context
我错过什么了吗?还是我说的不对
谢谢。静态方法是类成员,不绑定到对象。这意味着,
$This
根本不存在。不能在静态方法中使用它。如果fetch()
self::fetch(/* arguments */);
如果不是,则getPrefixFromSubcategoid()
也不应该是静态的,fetch()
应该是静态的(参见上面的示例),或者您需要一个对象
$tmp = new self;
$tmp->fetch(/* arguments */);
$这是对当前对象的引用。它不是对类的引用。因为您是静态地使用它,所以没有对象。您还必须在那里进行静态调用。$this
用于获取实例变量或方法(简单成员,如果您有一个使用new
定义的对象,则基本上是当前对象)但是,当您想要访问静态变量时,应该使用$self::some_variable
,:
是范围解析操作符
如果要在静态函数下使用方法或变量,则必须声明方法或变量静态
,好吧,它说您在静态方法中使用$this
,这是不允许的。您不能在静态函数
下调用非静态函数
,静态
方法在使用类时初始化,而非静态函数
在使用新建
关键字时初始化。