最近我得到了一些PHP网站项目(这个人不愿意帮助我),所以我必须了解他的代码。也许我的回答是愚蠢的,但是......
但是在课前还有一些方法,例如:例如:
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();
}
}
正如您在本示例中所看到的,这些记录的方法未在定义的类中实现。但我的问题是什么 - 这个方法是从另一个类和模板调用的。 PHPStorm(我的IDE)将这些文档行与调用连接起来,并在引用之间引导ctrl+B
。但我无法找到这种方法的确切实现。它们不能在父类中找到,它们不在此文件中。我想也许这是一些我不熟悉的语法糖。我对吗?或者我有什么遗失的东西,以及其他地方的所有实现? (通过文件夹中的方法名称搜索没有给我任何东西)
答案 0 :(得分:1)
PHP有一些magic methods,其中一个是__call()
。
当你有一个实现__call()
的对象(由它自己或其中一个父类)时,你可以在其上调用一个不可访问的方法,而是调用__call()
方法。例如,当您从外部调用私有方法,或者调用未在代码中定义的方法时,会发生这种情况。
当您对不可访问的方法使用此类调用时,IDE很可能会显示该方法不存在的警告,尽管代码本身可能在运行时工作。这些警告非常烦人,因此您可以在类中添加@method
标记,IDE将知道此方法存在,并且不会显示警告。
因此,要支持您从某人那里获得的代码,请查看__call()
方法实现。请注意,此方法可以在其中一个父类中实现,因此也请检查它们。