Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个PHP静态方法有什么问题?_Php_Static_Static Methods - Fatal编程技术网

这个PHP静态方法有什么问题?

这个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']; } 我确信我使用的代码是正确的,因为当我在类范围外使用相同的代码时,它会正

我在class
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
,这是不允许的。您不能在
静态函数
下调用
非静态函数
静态
方法在使用类时初始化,而
非静态函数
在使用
新建
关键字时初始化。