PHP是我的第一个编程语言.在使用静态类和实例化对象时,我无法完全理解.
我意识到你可以复制和克隆对象.但是在我使用php的所有时间中,任何对象或函数总是最终作为单个返回(数组,字符串,整数)值或void.
我理解书中的概念,比如电子游戏角色类.复制汽车对象,并使新的一个红色,这一切都有意义,但不是它在PHP和Web应用程序中的应用程序.
一个简单的例子.一个博客.博客的哪些对象最好实现为静态或实例化对象?DB类?为什么不在全局范围内实例化db对象?为什么不让每个对象都静止呢?性能怎么样?
这一切都只是风格吗?有没有正确的方法来做这些事情?
在PHP中,(与我原先的想法不同),调用静态方法与简单函数的开销很大.
在一个非常简单的工作台上,开销超过调用时间的30%(该方法只返回参数):
// bench static method
$starttime = microtime(true);
for ($i = 0; $i< 10*1000*1000; $i++)
SomeClass::doTest($i);
echo "Static Time: " , (microtime(true)-$starttime) , " ms\n";
// bench object method
$starttime = microtime(true);
for ($i = 0; $i< 10*1000*1000; $i++)
$someObj->doTest($i);
echo "Object Time: " , (microtime(true)-$starttime) , " ms\n";
// bench function
$starttime = microtime(true);
for ($i = 0; $i< 10*1000*1000; $i++)
something_doTest($i);
echo "Function Time: " , (microtime(true)-$starttime) , " ms\n";
Run Code Online (Sandbox Code Playgroud)
输出:
Static Time: 0.640204906464 ms
Object Time: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Web应用程序,每秒可以看到几十个并发用户.我有一个类将在同一页面加载中多次实例化.在那个类中,我有一些属性在每个对象中总是相同的,所以我正在考虑声明这些属性,static以减少在同一个类的多个实例被实例化时将使用的内存.页面请求.
这样做会为这个应用程序使用更少的内存,因为PHP只能存储一次静态属性的值吗?这样做会在并发用户之间节省内存,还是只在每个PHP进程中节省内存?
这对方法有何影响?如果这意味着对象可以循环使用相同的方法,那么为什么在尝试保存内存时,不会将类的所有方法都声明为静态?
我不清楚为什么以及何时会声明属性或方法是静态的,但我确实理解将它们声明为静态允许在不实例化类的对象的情况下访问它们(这感觉就像一个黑客...这些方法和属性应该在其他地方......不是吗?).我特别感兴趣的是static声明影响内存使用的方式,以便在我的网络服务器上尽可能降低内存使用率......总的来说,我对发生的事情有了更好的理解.