Wol*_*lvt 20 php oop phpunit unit-testing self
我不想写长篇文章,因为这是一个简短的问题.PHPUnit测试包含几个静态的方法.例如所有那些\PHPUnit\Framework\Assert::assert*()方法以及identicalTo,equalTo.
我的IDE(具有IntelliSense /自动完成功能)不接受使用$this,但使用self.我已经知道应该通过类调用静态函数,而不是对象self.
什么更正确?
$this->assertTrue('test');
Run Code Online (Sandbox Code Playgroud)
要么
self::assertTrue('test');
Run Code Online (Sandbox Code Playgroud)
?
(如果"$ this"更正确,你能否指出为什么我们不应该使用"自我"?)
通常,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"
Run Code Online (Sandbox Code Playgroud)
处理$this或时要记住继承性self。$this将始终引用当前对象,而self引用self所使用的类。现代PHP还通过关键字包括后期静态绑定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"
Run Code Online (Sandbox Code Playgroud)
特别是对于PHPUnit来说,似乎他们只是按照自己一贯的方式做事!尽管根据他们的文档,您的代码应该可以使用静态方法正常工作。
| 归档时间: |
|
| 查看次数: |
3691 次 |
| 最近记录: |