Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用类的实例访问静态方法是否被认为是错误的做法?_Php_Oop - Fatal编程技术网

Php 使用类的实例访问静态方法是否被认为是错误的做法?

Php 使用类的实例访问静态方法是否被认为是错误的做法?,php,oop,Php,Oop,使用类的实例访问静态方法是否被认为是错误的做法 即 vs ($model在这两种情况下都是实例化的,我只是想知道一种方法是否比另一种更可取。)传统上,第一种方法(指定类名本身)与其他语言(如Java)有更多相似之处 第二个是PHP(afaik)所独有的;它之所以有效,是因为:操作符消除了表达式的歧义,而Java的实例和静态属性都使用句点 我不确定使用第二个选项会对性能产生什么影响,但我认为这取决于个人品味/编码标准 结论 如果实例的类型立即从周围的代码中清除,那么选择第二个选项可能更容易(有时类

使用类的实例访问静态方法是否被认为是错误的做法

vs


$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();