使用PHP __call
使类扩展2个类时,
您可以使用@method
让IDE知道方法存在。
但是当要求IDE跳转到方法的声明时,你最终会在@方法行上,一种不被卡住的方法就是在上方或下方添加@see
行。但是添加该行和分隔符行会使PHPDoc变长3倍。
是否可以在同一行添加@see
?
看一些使用它的例子,以及其他一些在{}
内使用它的例子。
在我的IDE(PhpStorm)中对它进行了测试,只有在@see
的单独行上才能跳转到@see
的声明。
PHPDoc是否允许我们在@method
的同一行使用<?php
class a { function ma() { return "a"; } }
class b { function mb() { return "b"; } }
/**
* Class c
*
* @method string mb() { @see b::mb() }
*/
class c extends a
{
/** @var b b */
public $b;
function __construct() { $this->b = new b(); }
function mc() { return "c"; }
function __call($name, $arguments)
{
return call_user_func_array([$this->b, $name], $arguments);
}
}
$c = new c();
var_dump($c->mb());
?如果是这样,那么正确的语法是什么?
示例:
{
"vr-sessions" : {
"-KvDNAFD_BxlKEJ958eX" : {
"interview" : "Android",
"questions" : {
"-KvG7BuWu4eI52pq-6uH" : {
"playaudio" : "audio1",
"question" : "Why cannot you run standard Java bytecode on Android?"
},
"-KvG9rxQv5DWJa1EMnhi" : {
"playaudio" : "audio2",
"question" : "Where will you declare your activity so the system can access it?"
}
}
},
"-KvDNOE8YhVdgovxrzrN" : {
"interview" : "DevOps",
"questions" : {
"-KvMPd0v9BXnjYZxFm5Q" : {
"playaudio" : "audio3",
"question" : "Explain what is DevOps?"
},
"-KvMPi24OKeQTp8aJI0x" : {
"playaudio" : "audio4",
"question" : "What are the core operations of DevOps with application development and with infrastructure?"
},
"-KvMPqYxJunKp2ByLZKO" : {
"playaudio" : "audio5",
"question" : "Explain how “Infrastructure of code” is processed or executed in AWS?"
}
}
},
答案 0 :(得分:3)
PHPDoc还没有正式的标准。 PHPDocumentor是事实上的标准,但PHP FIG也正在开发。
在PHPDoc评论中,PhpStorm支持符合ZEND,PEAR和其他标准的格式选项。
正如你和我都发现的那样,需要反复试验来确定PHPStorm支持的确切内容。
PHPDocumentor确实支持@see内联:
结构元素或带有@see标记的长描述中的内嵌文本将在其描述中显示链接。
PHP FIG&#39; proposed standard州:
特定标签可能有一个&#34;内联PHPDoc&#34;标签结尾处的标签&#34;标签&#34;定义......一个例子是@method标签。可以使用&#34;内联PHPDoc&#34;来扩充此标记。提供有关参数,返回值或功能和方法支持的任何其他标签的其他信息。
奇怪的是@method定义并没有明确这一点。
我认为这意味着你可以在PHPDoc评论的@method行中使用@see,但是不要期望PHPStorm能够识别它。您的语法是正确的,并且符合&#34;标准&#34;它应该保留在@method的末尾。