2011-12-14 6 views
2

Я написал класс, который строит некоторый URL-адрес на странице каждый раз, когда клиентский запрос на сервер. В гипотетическом сценарии, в котором 100 клиентов одновременно требуют подключения к серверу, он должен произвести 100 экземпляров этого класса, правильно? Итак, я хотел бы знать, что будет результатом многих случаев одновременно на странице, и если это хорошая практика для решения моей проблемы с «генератором URL». ThanksКаждый запрос клиента является новым экземпляром класса?

[EDIT] Что я пытался сделать, это использовать метод __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 
+0

Вы можете начать с отправки кода для просмотра людей ... – rdlowrey

+0

Возможно, вам придется отредактировать это, чтобы было более ясно, каковы ваши цели. Когда я его прочитал, каждый клиентский запрос ничем не отличается от любого другого посетителя на сайте, который создает экземпляры любых классов, о которых говорят программисты. Вы спрашиваете о перегрузке сервера с запросами? Мы не знаем, что у вас даже есть проблема с «генератором url», поэтому мы не можем вам ничего рассказать о том, может ли ваш вопрос выше решить. –

+0

@anemi Я думаю, вам нужно потратить некоторое время и прояснить проблему для нас. Это действительно неясно, что вы имеете в виду мой «генератор URL». Возможно, определение того, какую проблему вы пытаетесь решить, было бы хорошим шагом. – hafichuk

ответ

2

После прочтения некоторых комментариев, я думаю, что вы не понимаете, что такое PHP, и нет. Каждый раз, когда пользователь делает запрос на страницу, он «создает экземпляр», как вы говорите. После загрузки страницы «экземпляр» удаляется. Так работает PHP.

Одиночные классы не будут обмениваться данными с одним экземпляром пользователя с другим экземпляром пользователя, но вместо этого будут совместно использовать этот пользовательский класс этого класса с тем же экземпляром пользователей другого класса.

Это то, как работает PHP и является нормальным. Поскольку php не «хранит» данные между каждым запросом, здесь используется memcache или mysql или сеансы.

+0

Благодарим вас за разъяснение. На самом деле я имел в виду «поделиться» экземплярами классов между разными запросами пользователей. Можете ли вы предложить мне несколько ссылок на шаблоны в php? – anemiCCinema

+0

@anemiCCinema http://www.ibm.com/developerworks/library/os-php-designptrns/ – Bot

2

Одна вещь, чтобы быть в курсе, что PHP не имеет область применения, а это означает, что не существует разделяемой памяти между запросами. База данных (mysql) или в хранилище памяти (memcache) обычно используется для совместного использования состояния объектов между запросами.

Не зная больше особенностей вашего вопроса, в общем, каждый запрос, сделанный на веб-сервер, порождает новый экземпляр вашего класса, но каждый класс будет знать только о своем собственном состоянии, если у вас нет механизма для его совместного использования.

+0

Итак, если нет системы memcache для совместного использования состояния объектов, результатом будет большая трата ресурсов сервером со 100 или более активными экземплярами, не так ли? Как насчет одноэлементной картины? Это было бы полезно в таком случае? Спасибо – anemiCCinema

+0

Не проблема не будет решена путем изменения шаблона. Я предполагаю, что вы пытаетесь создать компоновщик URL. Что вам нужно сделать, это создать класс, который генерирует URL-адреса, проверяет, существует ли он в базе данных, а затем сохраняет их, если они уникальны (снова в базе данных). – hafichuk

Смежные вопросы