在用记事本++和sublime进行了许多幸福的编码之后,建议我尝试使用PHP
IDE。我正在尝试phpStorm,看起来不错。代码完成和文档编写是一个很棒的功能,但是当使用魔术方法时,对我来说却行不通。
是否有解决办法使phpStorm了解魔术方法的状况?
我们的情况是这样的:
abstract class a {
public static function __callStatic($method,$args)
{
if(strpos($method,"get_by_") === 0)
{
//do stuff
} elseif(strpos($method,"get_first_by_") === 0) {
//do stuff
} elseif($method == "get_all") {
//do stuff
}
}
}
class b extends a {
// some more stuff
}
b::get_by_user_id(27);
b::get_first_by_id(156);
b::get_all();
神奇的callStatic方法使我们能够通过1个或多个组成函数调用的参数来获取对象的集合。
我看到在这些情况下有一个@method语句可使用,但是phpStorm仅选择了这些语句中的第一个。此外,我只能将返回类型设置为Mixed,因为我希望能够将其设置为被调用的任何类(在我的示例中为b)。
任何想法或建议都会非常感激,谢谢。
使用类级别的PHPDoc注释-特别是 @method 标记-在PhpStorm中可以正常工作:
/**
* @method static someClass get_by_user_id(int $id) Bla-bla
* @method static someClass get_first_by_id(int $id)
*/
abstract class a {
...
在上面:
@method
-PHPDoc标签static
-告诉您这是静态方法someClass
或$this
-返回类型get_by_user_id
-方法名称(int $id)
-方法签名: ([[type] [parameter]<, ...>])
Bla-bla
-一些可选的描述有关更多@method
:
PS 虽然@method static
在PhpStorm中工作正常(告诉IDE该方法是静态的),但实际的phpDocumentor工具可能还不支持(还好吗?)(对不起,有一段时间没有使用它了)。
另外一种方法 :(当然是在PhpStorm中)Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class
-它不会以任何方式帮助此类方法的代码完成,但是不会将那些魔术方法标记为“未定义方法”错误。
phpDocumentor的 关于@property
/ @method
标签使用RegEx /部分名称 的票据
(如何处理文档以及在处理代码完成时对实际IDE的帮助很少):
问题内容: 除非我完全误解,否则and 方法应该允许→ 和的重载。 例如,以下语句应调用该方法: 并且以下应使用该方法: 这在我的代码中不起作用,并且可以通过以下简单示例重现: 这只会导致: 在那儿放一些电话表明它根本没打。 现在,我只是说了一下要解决的问题,并在目前需要的地方手动使用它,但这不是很动态,并且需要知道“重载”代码实际上没有被调用,除非专门调用。我想知道这是否不是应该以我所理解的方式
Python 中有很多 __ 开始和结尾的特殊方法,它们多是所有类型都拥有的,通过实现这些 特殊方法可以实现很多有意思的功能,比如最常使用的 __str__、__repr__ 和 __unicode__ 这三个就可以用于输出对象的字符串结果。 GitHub 上有篇翻译不错: 翻译 原文 魔术方法与语法糖 Lisp 的语法极其简单,主要语法“S 表达式”非常接近于数学中的波兰表达式,写法如下: (+
问题内容: 我最近一直在使用Python,而我发现有点奇怪的是,广泛使用了“魔术方法”,例如,使其长度可用,一个对象实现一个方法,然后在你写。 我只是想知道为什么对象不能简单地定义一个方法并直接将其作为对象的成员来调用,例如?我敢肯定,Python这么做的确有充分的理由,但是作为一个新手,我还没有弄清楚它们到底是什么。 问题答案: AFAIK在这方面很特殊,并且具有历史渊源。 这是FAQ中的报价:
考虑以下令人厌恶的类别: 然后,可以通过 lst调用map(,lst),即 但是,添加并不那么合作: 这种陌生感可以通过直接调用魔法方法来解决: 所以我的问题是,是什么给了我们?直接分配<code>__add_
问题内容: 我的任务是编写一个询问用户输入的程序,该方法将返回输入是否形成幻方。无论我输入到控制台什么,程序都会返回我输入了一个魔术方块。我想念什么? 幻方定义:如果行,列和对角线的总和相同,则二维数组就是幻方。 问题答案: 您没有保存输入的内容,因此将0x0 square传递给。 许多方面的实现是错误的。 条件应该是。 您只需要在计算完成后检查即可。 您必须先进行初始化,然后再计算它们。 您应该
本文向大家介绍php 魔术方法详解,包括了php 魔术方法详解的使用技巧和注意事项,需要的朋友参考一下 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。PHP 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。 __toString() 和__invoke()