PHP项目

时间:2017-01-13 15:02:02

标签: php oop implementation

最近我得到了一些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。但我无法找到这种方法的确切实现。它们不能在父类中找到,它们不在此文件中。我想也许这是一些我不熟悉的语法糖。我对吗?或者我有什么遗失的东西,以及其他地方的所有实现? (通过文件夹中的方法名称搜索没有给我任何东西)

1 个答案:

答案 0 :(得分:1)

PHP有一些magic methods,其中一个是__call()

当你有一个实现__call()的对象(由它自己或其中一个父类)时,你可以在其上调用一个不可访问的方法,而是调用__call()方法。例如,当您从外部调用私有方法,或者调用未在代码中定义的方法时,会发生这种情况。

当您对不可访问的方法使用此类调用时,IDE很可能会显示该方法不存在的警告,尽管代码本身可能在运行时工作。这些警告非常烦人,因此您可以在类中添加@method标记,IDE将知道此方法存在,并且不会显示警告。

因此,要支持您从某人那里获得的代码,请查看__call()方法实现。请注意,此方法可以在其中一个父类中实现,因此也请检查它们。