我对在WordPress环境中使用PHP静态类变量的理解是,如果在同一HTTP请求中实例化了2个或更多相同类的对象,则它们的类静态变量将被共享。
那么不同的HTTP请求呢?类静态变量是否会在HTTP请求之间共享?还是每个HTTP请求都会创建一个全新的对象副本?
<?php
class MyClass {
public function __construct() {
// any action
}
public function anyMethod() {
// any code
}
}
$obj = new MyClass;
$obj
是每个请求都从头开始创建的。实际上,这还不是全部。你整个应用程序也是从头开始“创建”的。
class Exemple
{
public static $foo = 42;
}
echo Exemple::$foo; // 42
$object = new Exemple;
$object2 = new Exemple;
echo $object::$foo; // 42
echo $object2::$foo; // 42
Exemple::$foo = 1;
echo Exemple::$foo; // 1
echo $object::$foo; // 1
echo $object2::$foo; // 1
class Exemple2
{
public $bar;
}
$object = new Exemple2;
$object2 = new Exemple2;
$object->bar = 42;
echo $object->bar; // 42
echo $object2->bar; // null
现在我们已经澄清了静态的事情,我们可以谈论http请求。
每当您的Web服务器收到新请求时,它会启动一个新的 PHP进程来执行指定的脚本。因此,全局状态不会在http请求之间持久存在,因为每个请求都在自己的PHP进程中执行。
static
属性的,而不是类实例化或单例模式。 - decezestatic
属性,因为它们也是类的一部分,对吧? - Kristian Vitozev