我是PHP开发人员,我的项目几乎每个页面都包含一个类。现在,我每次创建的类的对象在所有页面中都是相同的,尽管我在每个对象中都需要有一个对象,但是将页面放在其中。所以我的问题是,我可以拥有一个静态变量的类,该变量在不同页面的实例之间存在吗?
注意-我只能在创建第一个实例时创建对象,因为您不能在变量中声明new
示例:
页面名称-class.php
<?php
class foo{
var $a;
public static $b;
function foo($a){
$this->a = $a;
if(!self::$b) self::b = new bar("c");
}
public static function update_static(){
self::$b = new bar("c2");
}
}
class bar{
var $c;
function foo($c){
$this->c = $c;
}
}
?>
现在我有两个不同的页面。
第1页。
<?php
include('class.php');
$new_foo = new foo("a");
var_dump(foo::$b); //or var_dump($new_foo::$b)
?>
第2页。
<?php
include('class.php');
$new_foo = new foo("a");
foo::update_static();
?>
我希望当您运行第一页时,然后运行第二页,然后再运行第一页时,第一页上的选择将是: 首次运行-
object(bar)(1){["c"]=>string(1) "c"}
运行第二页后第二次运行-
object(bar)(1){["c"]=>string(1) "c2"}
现在我知道只有在创建第一个实例时,我才在静态变量中声明对象,但是我想知道它们是否有办法在多个实例中共享一个静态对象。
答案 0 :(得分:1)
您可以但很可能不会使用静态变量。可以通过让Web服务器重复使用相同的内存来完成此操作,就像ReactPHP中的某些实现一样。
但是,大多数Web服务器都设置为将PHP请求视为不共享任何内存的“新”进程,因此先前请求中的变量和属性将不可用。维护这些请求状态的方法是使用持久性存储(数据库),缓存,会话(服务器端)或cookie(客户端)。