【发布时间】:2013-03-16 01:38:35
【问题描述】:
在使用 notepad++ 和 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 只选择了这些语句中的第一个。此外,我只能将返回类型设置为混合,因为我希望能够将其设置为调用它的任何类(在我的示例中为 b)。
任何想法或建议都将非常感激,谢谢。
【问题讨论】:
-
为什么会有任何人认为覆盖
_call是个好主意?!! -
得说,+1'd Brian 的评论,以防任何理智的人都会找到这个问题。魔术方法适用于所有意图和目的:无法记录(尝试将 a(n) [参数|前置条件|后置条件|异常] 记录为魔术方法),不适合 IDE(尝试逐步调试魔术方法),对重构具有弹性(请不要考虑尝试在终身软件中重构魔法方法)和 LAZY(好吧,最后一个可能被解释为意见)。
-
-1 对@LukeA.Leber 评论中的意见表示缺乏远见。虽然魔术方法不是一种编写更少代码的方法(如果您使用它们是懒惰的),但魔术方法使架构成为可能,否则简单是不可能的,或者会非常复杂以至于不值得编写。在使用 PHPDoc 时,它们完全是 IDE 友好的。请注意,大多数时候您不需要魔术方法,但是当您需要它们时,没有替代品(在 PHP 中)。当它们以非常结构化的方式使用时,使用它们是一个完整的有效解决方案。
-
不要认为覆盖
__call是一个坏主意。这一切都与实施有关。上面问题中显示的实现肯定不是最好的方法,但是对于可链接的 API,它提供了很大的灵活性。
标签: php documentation phpstorm magic-methods docblocks