Php 使用类的实例访问静态方法是否被认为是错误的做法?
使用类的实例访问静态方法是否被认为是错误的做法 即 vsPhp 使用类的实例访问静态方法是否被认为是错误的做法?,php,oop,Php,Oop,使用类的实例访问静态方法是否被认为是错误的做法 即 vs ($model在这两种情况下都是实例化的,我只是想知道一种方法是否比另一种更可取。)传统上,第一种方法(指定类名本身)与其他语言(如Java)有更多相似之处 第二个是PHP(afaik)所独有的;它之所以有效,是因为:操作符消除了表达式的歧义,而Java的实例和静态属性都使用句点 我不确定使用第二个选项会对性能产生什么影响,但我认为这取决于个人品味/编码标准 结论 如果实例的类型立即从周围的代码中清除,那么选择第二个选项可能更容易(有时类
(
$model
在这两种情况下都是实例化的,我只是想知道一种方法是否比另一种更可取。)传统上,第一种方法(指定类名本身)与其他语言(如Java)有更多相似之处
第二个是PHP(afaik)所独有的;它之所以有效,是因为:
操作符消除了表达式的歧义,而Java的实例和静态属性都使用句点
我不确定使用第二个选项会对性能产生什么影响,但我认为这取决于个人品味/编码标准
结论
如果实例的类型立即从周围的代码中清除,那么选择第二个选项可能更容易(有时类名可能相当大);但如果没有,请使用第一个选项,因为它是最明确的。我认为这取决于具体情况。您可以愉快地使用静态方法很多年,享受无实例化代码的乐趣,但总有一天您必须将一些(就是这样)调用重新路由到另一个后代类,所以简单的搜索和替换调用是不行的。)因此,我认为,使用准备好的物体是一条更安全的路线 作为替代方案,您可以使用以下内容:
$className = 'MyClass';
$className::classyMethod1();
$className::classyMethod2();
。。。但我认为,这可能会让时间变得相当混乱(并且只能在PHP 5.3+中使用)我相信,这个替代方案:
$options = MyClass::getOptions();
实际上是在浪费更少的内存,因为您不需要额外的变量来调用静态函数。@sigateng IDE没有抱怨,它运行起来……好吧,那是我的错,对不起
$className = 'MyClass';
$className::classyMethod1();
$className::classyMethod2();
$options = MyClass::getOptions();