Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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_Html - Fatal编程技术网

PHP:静态比非静态好吗?

PHP:静态比非静态好吗?,php,html,Php,Html,当我试图运行我的网站时,我被静态和非静态函数以及类属性弄糊涂了 有人能解释一下,使用静态函数编写整个网站是否比使用非静态方法更好? 我在谷歌上找不到太多这方面的信息。这实际上取决于你的应用程序是如何设计的。如果函数可以并且将被调用,并且没有实例化类,那么将其声明为静态。否则,不要。在几乎所有情况下,您都将使用这两种方法的组合,因为只使用静态函数没有意义(您也可以编写过程代码)。编写OO代码和只使用静态变量和方法没有意义。这与编写程序代码是一样的。仅使用静态代码并不能从OOP提供的所有功能中获益

当我试图运行我的网站时,我被静态和非静态函数以及类属性弄糊涂了

有人能解释一下,使用静态函数编写整个网站是否比使用非静态方法更好?
我在谷歌上找不到太多这方面的信息。

这实际上取决于你的应用程序是如何设计的。如果函数可以并且将被调用,并且没有实例化类,那么将其声明为静态。否则,不要。在几乎所有情况下,您都将使用这两种方法的组合,因为只使用静态函数没有意义(您也可以编写过程代码)。

编写OO代码和只使用静态变量和方法没有意义。这与编写程序代码是一样的。仅使用静态代码并不能从OOP提供的所有功能中获益


我并不是说你不能使用静态方法或属性,但是大量使用它们是一个糟糕的OO设计的标志。

如果你的方法需要访问“this->”中的数据,那么你必须使它成为一个非静态方法。然后需要实例化对象(通过“新建”)


如果所有方法使用的是函数参数中包含的数据,那么考虑将方法静态化。或者只使用静态方法创建一个单独的类。

有一个学派认为静态是有害的,应该避免,因为它们在类之间创建了过于僵化的绑定。例如,如果您有类A和B,它们调用彼此的方法,然后从它们中派生出子类AA和BB,并期望AA调用BB的代码,那么如果它们只知道彼此是实例,那么这将很好地工作,但对于仍然指向A/B的静态调用,这将失败


无论如何,PHP的静态实现是相当糟糕的。5.3之前没有后期静态绑定(意味着对象不能调用自己的静态方法,使得静态函数在OOP架构中毫无用处),静态函数不能在严格模式下非静态调用,错误调用函数会导致非常奇怪的错误,类与其父类共享其静态变量。。。如果不确定,您应该使用非静态IMHO。

我认为您不应该只使用其中一种。只有在有意义的情况下才使用静态,同样的情况下,你在谷歌上找不到太多,因为它很大程度上取决于你的应用程序的架构和(软件)设计。你不能只交换静态和非静态函数。你的类都不需要对象实例来存储状态吗?两者都不是更好的,它们只是不同而已。相关:并且只使用非静态方法和属性是好的,对吗?我认为两者的结合是最好的。e、 一些设计模式强烈依赖于静态功能,例如Singleton。您必须仅在必要时使用静态代码。此答案仅在语义级别上突出了差异。它没有解决使用静态的缺点,例如在测试驱动的开发中。