jjzjj

PHPDoc 和 __callStatic

coder 2023-06-14 原文

tl;dr

注释(在 PHPDoc 中)通过 __callStatic 实现的函数的正确方法是什么?更重要的是:有没有办法让 NetBeans PHPStorm 理解这些是静态方法?

动机

如果您想了解更大的图景,这就是我如何回答这个问题的。

问题:在我当前的项目中,我们有大量的类实际上应该是单例(数据库代理等)。不用说,我们至少有几百行 require_once$foo = new FooProxy(); 行。

解决方案:我创建了一个 Loader 类来解决这个问题,使用 __callStatic 魔术方法所以我们可以只说 $foo = 加载器::FooProxy();。它非常适合我们的目的,但是:

问题:这种方式在团队中使用的任何一个 IDE 中显然都没有类型提示。

解决方案:每个模块定义一个 Loader 的子类,添加仅路由到 __callStatic 的方法。

问题:为了自动完成而添加实际解释的代码是 Not Acceptable (这可能会有争议,但让我们暂时接受它)。

解决方案:我们不添加任何实际方法,只在 PHPDoc 中声明方法,如下所示:

<?php
/**
 * @method FooProxy FooProxy()
 */
 class BarLoader extends Loader {}
?>

问题:FooProxy 不是静态方法。以下任何一项都不会使其成为静态的:

<?php
/**
 * @static
 * @method FooProxy FooProxy()
 */

///////////////

/**
 * @static @method A A()
 * @method static A A()
 * @method A static A()
 * @method A A() static
 */

使类抽象没有区别。大约一个小时的谷歌没有找到任何解决方案。主要目标是让 IDE 了解这些功能;拥有正确的 PHPDoc 并不是必需的。

最佳答案

好吧,PhpStorm 3.0 会接受

@method static type name() description

查看相关功能请求 http://youtrack.jetbrains.net/issue/WI-4051

关于PHPDoc 和 __callStatic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982312/

有关PHPDoc 和 __callStatic的更多相关文章

  1. PhpDoc: protected 属性(property) - 2

    是否可以使用PhpDoc声明protected或private类@property?/***ClassNode*@packageapp\models*@propertystring$name*/classNode{} 最佳答案 我不这么认为。对于@property,public是隐含的,即使它是只读或只写的。此类标记的意义​​在于记录无法推断的接口(interface)。私有(private)/protected变量实际上是类的内部变量,因此它只与子类相关,应该像他们已经知道的那样编写。不过,您仍然可以在声明之前立即留下一个普通的文

  2. php - 我可以在 PHPDoc 中的 @method 行上使用 @see 吗? - 2

    当使用PHPs__call使一个类扩展2个类时,您可以使用@method让IDE知道这些方法存在。但是当要求IDE跳转到方法的声明时,您最终会到达@method-row,避免卡在那里的一种方法是在上方添加@see行或以下。但是添加该行和一个分隔行,使PHPDoc的长度/高度增加了3倍。是否可以在同一行添加@see?查看了一些按原样使用它的示例,以及一些在{}中使用它的其他示例。在我的IDE(PhpStorm)中对其进行了测试,跳转至@see的声明仅在它位于单独的行时才有效。PHPDoc是否允许我们在与@method相同的行上使用@see?如果是这样,正确的语法是什么?例子:b=newb

  3. php - PHPDoc 中可选的可空参数 - 2

    想象一下,我们有一个带有可选可空参数(PHP7.0)的方法,如本例所示:/***@paramType1$foo*@paramType2$bar*/functionmyFunction(Type1$foo,Type2$bar=null){}不幸的是,从PHPDoc文档中并不清楚,将第二个参数标记为可选和可为空的正确方法是什么。通常我使用“Type2|null”表示法:/***@paramType1$foo*@paramType2|null$bar*/functionmyFunction(Type1$foo,Type2$bar=null){}实际上这是我更喜欢的方式,因为它明确描述了所有可

  4. php - 如何创建 phpdoc 教程/扩展页面来补充注释代码 - 2

    我正在尽一切努力让phpdocumentor允许我使用DocBook教程格式来补充它创建的文档:我正在使用Eclipse我已经在OSX机器上通过PEAR安装了phpDocumentor我可以从我的php类运行并自动生成代码它不会格式化教程-我找不到解决方案我已经尝试在整个文件结构中移动.pkg示例文件,在子文件夹中使用与代码中引用的包相似的名称......我真的很茫然-如果有人可以解释WHERE他们将.pkg和其他DocBook文件与他们正在记录的代码相关联,以及他们如何触发phpdoc对其进行格式化我将不胜感激,我目前正在使用它:phpdoc-oHTML:Smarty:HandS-d

  5. php 文件中的 phpdoc @var - 2

    我有下一个php代码我想让我的ide自动完成$a->正确,并告诉我$a中只有一个可用的方法foo。没有像$a=newA();这样的字符串。$a在另一个地方实例化并由自动加载器处理。 最佳答案 下面的语法在eclipse中运行良好/*@var$aA*/$a->请注意,我切换了参数顺序。 关于php文件中的phpdoc@var,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/77227

  6. PHPDoc - 哪个@[item] 用于我的源代码中的 "const"语句? - 2

    如何使用PHPDoc标记常量?我应该使用什么@-tag?我想到了@var,但那不合适。 最佳答案 简短的回答是没有。而且也不需要一个。文档生成器足够聪明,能够看到常量声明。因此,只需将摘要放在那里,不要使用任何@-tags。这应该是您需要做的所有事情......classfoo{/***Thisconstantdoessomethingthatyouneed.*/constFOO='bar';} 关于PHPDoc-哪个@[item]用于我的源代码中的"const"语句?,我们在Stack

  7. PHPDoc - 如何在 PHP 中标记构造函数 - 2

    在JSDoc中,我可以用@constructor标记我的构造函数。现在我试图在PHPDoc规范中找到如何对PHP构造函数执行相同的操作,但他们从未提及任何类似的内容。在PHP中标记我的构造函数的正确方法是什么。这个:/***@constructor*/publicfunction__construct(){}似乎无效。 最佳答案 PHP文档生成器会将__construct()方法识别为构造函数。不需要特殊标记。 关于PHPDoc-如何在PHP中标记构造函数,我们在StackOverflo

  8. php - phpDoc @method 签名中的可选参数 - 2

    有没有办法在phpDoc中将@method签名中的参数标记为可选?像这样:/**@methodboolalloc()alloc(int$filesize[,string&$result])Allocatesspaceforafiletobeuploaded*/ 最佳答案 通常,phpDocumentor通过查看方法签名中参数的默认值来识别可选参数。因此,使用您的示例:@methodboolalloc()alloc(int$filesize,string&$result='')Allocatesspacefor...

  9. PhpStorm - 参数的 PHPDoc "any"类型 - 2

    我来自严格类型化的编程语言,它有一个名为“ANY”的类型。因为PHP是松散耦合的,所以我的PhpDoc需要某种类型提示,说明变量、参数或返回值可以是任何类型。目前我必须写一些类似的东西:@varstring|int|bool|array|object$someVariable如果我能改写的话,我的生活会更轻松,代码也会更容易阅读:@varany$someVariable我实际上在很多情况下都遇到过这个问题-在过去的几个月里已经超过20-30次了,因为我使用了PhpStorm,它向我显示警告说某些方法需要其他类型的参数类型,或者因为我忘记将它显式地放在类型列表中,或者因为我使用的是用Ec

  10. php - eclipse PDT 中的错误 phpdoc 错误 - 2

    我目前将EclipsePhotonPDT用于一个旧的PHP应用程序。在这个应用程序中有很多phpdoc注释,但其中一些被标记为错误。for"@paramunknown$form"=>"unknown无法解析为类型"。同上“@returnAmbigous”=>“Ambigouscannotberesolvedtoatype”。有人知道如何禁用这些错误吗?(因为我所有的项目文件都标有错误图标,我看不到哪些文件确实有错误)。 最佳答案 最简单的短期修复是禁用该级别的错误检查:项目->属性PHP->验证->错误/警告启用项目特定设置Unde

随机推荐