是否正在使用类的实例来访问被认为是不良实践的静态方法?

时间:2012-06-15 16:16:18

标签: php oop

使用类的实例来访问被认为是不良做法的静态方法吗?

$model = new MyClass();
$options = MyClass::getOptions();

VS

$model = new MyClass();
$options = $model::getOptions();

$model在任何一种情况下都被实例化,我只是想知道一种方法是否优于另一种方法。)

3 个答案:

答案 0 :(得分:4)

传统上,第一种方式(指定类名本身)与其他语言(如Java)有更多相似之处。

第二个是PHP独有的(afaik);它的工作原理是因为::运算符消除了表达式的歧义,这与Java不同,后者用于实例和静态属性。

我不确定使用第二个选项会对性能产生什么影响,但我认为这取决于个人品味/编码标准。

<强>结论

如果您的实例类型立即从周围的代码中清除,则可能更容易选择第二个选项(有时类名可能非常大);但如果没有,请使用第一个选项,因为它是最明确的。

答案 1 :(得分:3)

这取决于我的想法。您可以愉快地使用静态方法许多快乐的年代,享受无实例化的代码,但有一天您必须重新路由一些(它就在哪里)调用另一个后代类,这么简单的搜索 - 并且替换呼叫不会这样做。因此,我认为,准备一个物体是一条更安全的路线。

作为替代方案,您可以使用以下内容:

$className = 'MyClass';
$className::classyMethod1();
$className::classyMethod2();

...但我认为这可能会让时间变得非常混乱(并且只能在PHP 5.3中使用)

答案 2 :(得分:1)

我相信,这个替代方案:

$options = MyClass::getOptions();

实际上浪费的内存较少,因为你不需要额外的变量来调用静态函数。