const vs static in PHP
在php5中,我可以向类声明常量值:
1 2 3 4 | class config { const mailserver = 'mx.google.com'; } |
但我也可以声明公共静态:
1 2 3 4 | class config { public static $mailserver = 'mx.google.com'; } |
在配置文件的情况下,我将稍后介绍,例如:
1 2 | imap_connect(config::$mailserver ... imap_connect(config::mailserver ... |
你认为哪个选项更适合使用??(更快、更少的内存负载等)
谢谢。
静态变量可以更改,常量变量不能更改。应该主要考虑配置变量是否能够在运行时进行更改,而不是哪个更快。两者之间的速度差(如果有的话)是如此之小,不值得考虑。
使用函数返回全局
0.0096、0.0053、0.0056、0.0054、0.0072、0.0063、0.006、0.0054、0.0054、0.0055、0.005、0.0057、0.0053、0.0049、0.0064、0.0054、0.0053、0.0053、0.0061、0.0059、0.0076、配置1
使用get-instance-normal类
0.0101,0.0089,0.0105,0.0088,0.0107,0.0083,0.0094,0.0081,0.0106,0.0093,0.0098,0.0092,0.009,0.0087,0.0087,0.0093,0.0095,0.0101,0.0086,0.0088,0.0082,配置2
使用静态VaR
0.0029,0.003,0.003,0.0029,0.0029,0.0029,0.003,0.0031,0.0032,0.0031,0.0029,0.0029,0.0029,0.0029,0.0031,0.0029,0.0029,0.0029,0.0029,0.0029,配置3
使用常数VaR0.0033、0.0031、0.0031、0.0031、0.0031、0.0031、0.0032、0.0031、0.0031、0.0031、0.0031、0.0034、0.0031、0.0031、0.0033、0.0031、0.0037、0.0031、0.0031、0.0032、0.0031、配置4
ZZU1〔0〕
在不允许静态变量的情况下,可以使用常量作为默认函数参数值。
const和static的另一个区别是类常量中不允许使用数组等变量,因此
1 2 3 4 |
作品,但
1 2 3 4 |
不会。
还要注意,由于yacoby上面所说的,对于静态变量,您可以做一些不能用const做的事情,例如,将运行时方法调用的结果赋给变量。
"const"和"public static"都是邪恶的!
正如KeithHum所指出的,常量不能是运行时方法的结果。而且,虽然我最初认为他说的是"可以将运行时方法调用的结果赋给(静态)变量"是正确的,但我的测试表明,要做到这一点,您必须跳过一些圈。
这似乎是一个小问题,但它可能是未来灾难的种子。假设在将来由于一些不可预见的原因,我被迫切换到初始化方法。如果这意味着我必须在我的控制下对文件做一些更改,我没有问题。但是,如果我改变了一个我已经发送给其他开发人员的库呢?
我要写的是,至少,如果他们想升级到我的新版本,我必须告诉其他人(以及"未来的我")对他们的文件进行更改。在"const"的情况下,他们必须在使用它的任何地方添加"$"。在其他场景中,我今天的测试表明,它们可能需要做更少的更改,但也有一些更改。
假设使用面向对象的代码,我将遵循我在许多语言中看到的一般建议,并且需要对PHP进行额外的强调—避免任何类型的可见属性,无论是常量、静态还是其他任何类型的属性。使用"getter"方法!
这看起来像是一个可笑的性能冲击和丑陋的代码风格,但除非你能预测未来,否则这是唯一的出路。
请参见:tjerd visser关于如何初始化静态变量并给它一个bump的答案。忽略他的贬低者-如果你关注的是性能,除了可能的错误和其他灾难,然后切换到另一种语言。