PHP 项目中缺少方法实现
Missing method implementations in PHP project
最近我接到了某人的 PHP 站点项目(这个人不想帮助我),所以我必须了解他的代码。也许我的回答会很愚蠢,但是...
但在 class 之前有一些方法,如示例所示:
namespace Base\Classes;
/**
* @method int method1()
* @method $this method2(int $parameter)
*/
class SomeClass extends ParentClass
{
public $_s_a = false;
public $_user_roles = [];
public function SomeClassMethod() {
somethingDone();
}
}
正如您在此示例中所见,这些记录的方法未在定义的 class 中实现。但我的问题是什么 - 这个方法是从另一个 classes 和模板调用的。 PHPStorm(我的 IDE)将此文档行与调用联系起来,ctrl+B
从引用之间引出。但是我找不到这个方法的确切实现。在父 classes 中找不到它们,它们不在此文件中。我想这可能是我不熟悉的一些语法糖。我对吗?或者我遗漏了什么,所有实现都在另一个地方? (在文件夹中按方法名称搜索对我没有任何帮助)
PHP有几个magic methods, and one of them is __call()
。
当您有一个实现 __call()
的对象(由其本身或由父 class 之一实现)时,您可以在其上调用不可访问的方法,并且 __call()
方法将被调用。例如,当您从外部调用私有方法时,或者当您调用代码中未定义的方法时,就会发生这种情况。
当您对不可访问的方法使用此类调用时,IDEs 很可能会显示该方法不存在的警告,尽管代码本身可能会在运行时运行。这些警告很烦人,所以你可以在你的 class 中添加一个 @method
标签,然后 IDE 就会知道这个方法存在,并且不会显示警告。
因此,为了支持您从某人那里获得的代码,请查看 __call()
方法实现。请注意,此方法可能在其中一个父 classes 中实现,因此也请检查它们。
最近我接到了某人的 PHP 站点项目(这个人不想帮助我),所以我必须了解他的代码。也许我的回答会很愚蠢,但是...
但在 class 之前有一些方法,如示例所示:
namespace Base\Classes;
/**
* @method int method1()
* @method $this method2(int $parameter)
*/
class SomeClass extends ParentClass
{
public $_s_a = false;
public $_user_roles = [];
public function SomeClassMethod() {
somethingDone();
}
}
正如您在此示例中所见,这些记录的方法未在定义的 class 中实现。但我的问题是什么 - 这个方法是从另一个 classes 和模板调用的。 PHPStorm(我的 IDE)将此文档行与调用联系起来,ctrl+B
从引用之间引出。但是我找不到这个方法的确切实现。在父 classes 中找不到它们,它们不在此文件中。我想这可能是我不熟悉的一些语法糖。我对吗?或者我遗漏了什么,所有实现都在另一个地方? (在文件夹中按方法名称搜索对我没有任何帮助)
PHP有几个magic methods, and one of them is __call()
。
当您有一个实现 __call()
的对象(由其本身或由父 class 之一实现)时,您可以在其上调用不可访问的方法,并且 __call()
方法将被调用。例如,当您从外部调用私有方法时,或者当您调用代码中未定义的方法时,就会发生这种情况。
当您对不可访问的方法使用此类调用时,IDEs 很可能会显示该方法不存在的警告,尽管代码本身可能会在运行时运行。这些警告很烦人,所以你可以在你的 class 中添加一个 @method
标签,然后 IDE 就会知道这个方法存在,并且不会显示警告。
因此,为了支持您从某人那里获得的代码,请查看 __call()
方法实现。请注意,此方法可能在其中一个父 classes 中实现,因此也请检查它们。