通常,仅用于引用静态方法和属性(尽管令人困惑的是,您可以使用 引用非静态方法,并使用 引用静态方法,前提是调用的方法不引用 。self
self
$this
self
$this
<?php
class Test {
public static function staticFunc() {echo "static ";}
public function nonStaticFunc() {echo "non-static\n";}
public function selfCaller() {self::staticFunc(); self::nonStaticFunc();}
public function thisCaller() {$this->staticFunc(); $this->nonStaticFunc();}
}
$t = new Test;
$t->selfCaller(); // returns "static non-static"
$t->thisCaller(); // also returns "static non-static"
在处理 或 时,请务必记住继承。 将始终引用当前对象,而引用所使用的类。现代 PHP 还通过关键字包含后期静态绑定,其操作方式与静态函数相同(并且应该优先)。$this
self
$this
self
self
static
$this
<?php
class Person {
public static function whatAmI() {return "Human";}
public function saySelf() {printf("I am %s\n", self::whatAmI());}
public function sayThis() {printf("I am %s\n", $this->whatAmI());}
public function sayStatic() {printf("I am %s\n", static::whatAmI());}
}
class Male extends Person {
public static function whatAmI() {return "Male";}
}
$p = new Male;
$p->saySelf(); // returns "I am Human"
$p->sayThis(); // returns "I am Male"
$p->sayStatic(); // returns "I am Male"
特别是关于PHPUnit,看起来他们只是按照他们一直以来的方式做事!尽管根据他们的文档,您的代码应该使用静态方法可以正常工作。