Что происходит с классом в PHP после его создания? - PullRequest
0 голосов
/ 08 июня 2010

Я просто играю с каким-то PHP, и мне было интересно, что происходит, когда объект из класса создается в другом скрипте PHP?

Я полагаю, что после того, как он был создан и обработан, невозможно вернуться назад и "поиграться" с ним из другого скрипта?

Идея в том, что я пытаюсь создать своего рода колоду карт, используя класс карт, каждая карта имеет определенные данные, которые добавляются к каждому отдельному объекту, чтобы сделать его уникальным, мастью, ценностью и т. Д. После создания мне нужно чтобы иметь возможность вернуться к определенным картам, чтобы использовать их. В Java у меня был бы массив карточных объектов, я не уверен, как приблизиться к той же области в PHP.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 08 июня 2010

Нет проблем с передачей объектов внутри скрипта php, ваша проблема в том, что php заключается в том, что веб-сервер, вызывающий скрипт, по сути "не имеет состояния".то есть каждый раз, когда кто-то отправляет URL из браузера, запускается полная свежая копия программы php.

Для сохранения данных между временами есть несколько вариантов: - Один из них - использовать переменные $ _SESSION, которые связаны спользовательский сеанс, но $ _SESSION сам по себе является массивом, поэтому он становится действительно неуклюжим, держа здесь сложные структуры, и, похоже, вы хотите разделить колоду между пользователями.

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

Гораздо лучше хранить колоду в базе данных (SQLITEобычно встроен в php), чтобы несколько пользователей могли делиться и обновлять контролируемым образом.

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

1 голос
/ 08 июня 2010

Повторное использование объекта между вызовами страницы кажется вашей проблемой. Может быть, вы можете сериализовать объект и сохранить его в базе данных и забрать его обратно ?? Проверьте php.net/serialize Дайте знать, как оно идет.

1 голос
/ 08 июня 2010

Что вы можете сделать, чтобы сохранить доступные вам объекты, это сериализовать объекты и сохранить их в таблице базы данных. Если вы связываете игровой идентификатор или что-то похожее на карты, вы можете получить их позже, используя этот игровой идентификатор.

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

0 голосов
/ 08 июня 2010

Сценарии Php не похожи на приложения сервера Java. Там, где ваш Java-сервер будет работать долго, ваш php-скрипт будет разовым.

Вместо этого вида процесса: пользователь отправляет запрос серверу, работающему на Java, сервер получает запрос в одном из своих бесконечных циклов, обрабатывает его сервером, сервер отправляет ответ, сервер ожидает нового запроса; у вас есть такая вещь: веб-сервер (Apache, Nginx, любой другой веб-сервер) получает запрос пользователя, понимает, что он должен быть интерпретирован php, запускает дочерний элемент php, этот дочерний элемент делает то, что в сценарии, отправляет свой ответ, умирает , сервер ждет новых запросов.

Итак, когда скрипт php заканчивается, от него ничего не остается (в хорошем случае).

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

Если игровое состояние предназначено только для одного пользователя, вы можете использовать сеансы (обычно файлы) для хранения объекта вашей колоды. Если он предназначен для использования несколькими игроками, вы должны сохранить его после сериализации в базе данных.

0 голосов
/ 08 июня 2010

Итак, вы хотите создать серверную карточную игру? Удачи! Это можно сделать, хотя я думаю, что сценарий, подобный javascript, о котором вы говорите, гораздо более подходит. Вы можете создать функцию, которая инициализирует колоду карт и работает с индексами и т. Д. Сохраняйте свои вещи в файлах cookie / сессиях и работайте с постбэками. По моему мнению, это будет адская работа по сравнению с jscript.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...