PHP-与多个页面的实例共享静态类变量

时间:2018-09-17 19:14:54

标签: php class object static

我是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"}

现在我知道只有在创建第一个实例时,我才在静态变量中声明对象,但是我想知道它们是否有办法在多个实例中共享一个静态对象。

1 个答案:

答案 0 :(得分:1)

您可以但很可能不会使用静态变量。可以通过让Web服务器重复使用相同的内存来完成此操作,就像ReactPHP中的某些实现一样。

但是,大多数Web服务器都设置为将PHP请求视为不共享任何内存的“新”进程,因此先前请求中的变量和属性将不可用。维护这些请求状态的方法是使用持久性存储(数据库),缓存,会话(服务器端)或cookie(客户端)。