[英]PHPStorm complains about static call of instance method handled by __CallStatic facade
我有一些帶有靜態方法的類,我需要將它們更改為用於單元測試的實例方法。 但是我無法更改靜態調用它們的代碼。 所以我正在嘗試實現一個外觀(類似於 Laravel 所做的),以便我可以靜態和動態地調用這些函數。 我的代碼本身正在運行,但 PHPStorm 抱怨靜態調用。 這是我的外觀類,帶有測試子類和 phpunit 測試:
abstract class Facade
{
/**
* Handle dynamic, static calls to the object.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public static function __callStatic($method, $parameters)
{
$instance = new static;
return call_user_func_array([$instance, $method], $parameters);
}
}
class Foo extends Facade
{
/**
* @param string $param1
* @return string
*/
public function TestMethod1($param1)
{
return 'Test: '.$param1;
}
}
class FooTest extends \PHPUnit_Framework_TestCase
{
public function testFacade()
{
$param1 = 'ok';
$result = Foo::TestMethod1($param1);
$this->assertEquals('Test: '.$param1, $result);
}
}
我曾嘗試在 Foo 上使用 phpdoc @method 並在 TestMethod1 方法上使用 @static,但似乎都不起作用。 如何讓 PHPStorm 停止抱怨靜態調用? 除了關閉檢查之外,還有其他方法可以處理嗎?
我的代碼本身正在工作,
它之所以有效,是因為您不在TestMethod1
使用$this
並且不在嚴格模式下運行測試。
__callStatic
永遠不會被調用,因為Foo::TestMethod1()
引用了一個現有的方法,即使它沒有被聲明為靜態的。
class T
{
public static function __callStatic($method, $args)
{
echo "__callStatic() called\n";
}
public function f()
{
echo "f() called\n";
}
}
T::f();
f() called
Deprecated: Non-static method T::f() should not be called statically in /in/rsR71 on line 15
f() called
Strict Standards: Non-static method T::f() should not be called statically in /in/rsR71 on line 15
f() called
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.