每个客户端请求都是该类的新实例?

时间:2011-12-14 20:51:02

标签: php oop

我写了一个类,每次向服务器发出客户端请求时,都会在页面中构建一些url。在一个假设的场景中,100个客户端同时需要服务器连接,它应该生成该类的100个实例,对吧? 所以我想知道页面上同时有多个实例的结果是什么,如果这是一个很好的做法,用“url生成器”来解决我的问题。 感谢

[编辑] 我试图做的是使用__set()方法和重载来构建URL。事实是我开始在php中研究面向对象的编程,我想尝试这种方法的实际应用。这是一段代码:

 Class BuildPath { 

    private $ServerPath;
    private $ServerUrl;
    private $UrlPath;
    private $data;

    function __construct()
    {
        $this->ServerPath = $_SERVER['DOCUMENT_ROOT'];
        $this->ServerUrl =  $_SERVER['HTTP_HOST'];
        $this->UrlPath = $_SERVER['REQUEST_URI'];
        $this->data = array();
    }

    public function __get($key) {
            return $this->$key;
    }

    public function __set($key,$value)
    {
        $this->data[$key] = $value;
    }

    // others methods

2 个答案:

答案 0 :(得分:2)

需要注意的一点是PHP没有应用程序范围,这意味着请求之间没有共享内存。数据库(mysql)或内存存储(memcache)通常用于在请求之间共享对象的状态。

在不了解问题的更多细节的情况下,一般来说,每次向网络服务器发出的请求都会产生一个新的类实例,但每个类只会知道它自己的状态,除非你有一个共享它的机制。 / p>

答案 1 :(得分:2)

在阅读了一些评论后,我认为你误解了PHP是什么,不是什么。每当用户向页面发出请求时,它就像你说的那样“创建一个实例”。加载页面后,将删除“实例”。这就是PHP的工作原理。

Singleton类不会与一个用户实例与另一个用户实例共享数据,而是与另一个类的相同用户实例共享该用户的该用户实例。

这就是PHP的运作方式,也很正常。由于php不会在每个请求之间“存储”数据,因此这是memcache或mysql使用或会话的地方。