使用类的实例访问静态方法被认为是不好的做法吗?
即
$model = new MyClass();
$options = MyClass::getOptions();
与
$model = new MyClass();
$options = $model::getOptions();
($model
在任何一种情况下都会实例化,我只是想知道一种方法是否比另一种更可取。
传统上,第一种方法(指定类名本身)与其他语言(如Java)有更多相似之处。
第二个是PHP(afaik)独有的;它的工作原理是::
运算符消除了表达式的歧义,不像Java,其中句点同时用于实例和静态属性。
我不确定使用第二个选项对性能的影响是什么,但我认为这归结为个人品味/编码标准。
结论
如果从周围的代码中立即清除了实例的类型,则使用第二个选项可能会更容易(有时类名可能很大);但如果不是,请使用第一个选项,因为它是最明确的。
我想这取决于。你可以愉快地使用静态方法很多年,享受无实例化的代码,但有一天你将不得不将一些(这就是它去的地方)调用重新路由到另一个后代类,所以简单的搜索和替换调用是行不通的。因此,我认为,使用准备好的物体是更安全的路线。
作为替代方法,您可以使用如下所示的内容:
$className = 'MyClass';
$className::classyMethod1();
$className::classyMethod2();
。但我想这可能会随着时间的推移变得非常混乱(并且只能在 PHP 5.3+ 中使用)
我相信,这个替代方案:
$options = MyClass::getOptions();
实际上浪费了更少的内存,因为您不需要额外的变量来调用静态函数。