Сохранение переменной Zend PHP Class для запросов mysql - PullRequest
1 голос
/ 09 января 2010

У меня есть флэш-приложение, которое использует один php-файл для извлечения записей из базы данных (используя Zend Framework). Когда приложение только начинается, я вызываю php, чтобы установить переменную класса, чтобы все будущие запросы к базе данных использовали эту переменную для выбора записей на основе ее значения. Итак, вот как начинается класс:

class MyClass
{   

    private $animal = "";

    public function setAnimal($anim) {
         $this->animal = $anim;
         echo($this->animal); //this correctly prints the variable I passed in
    }

Позже, основываясь на пользовательском вводе, я вызываю другой метод в этом классе, но это как если бы переменная класса $ animal была забыта, потому что она больше не имеет значения при любом последующем доступе к классу:

public function getAnimals()
    {
        echo('getAnimals: ');
        echo($this->animal); //this prints nothing - as if it doesn't know what "animal" is

        $result = mysql_query("SELECT * FROM animals WHERE animal='$this->animal'"); //and therefore this query doesn't work
        $t = array();

        while($row = mysql_fetch_assoc($result))
        {
            array_push($t, $row);
        }

        return $t;
    }

Итак, мой вопрос: как я могу сохранить переменную класса PHP, чтобы я мог установить ее один раз и получить к ней доступ в любое время в течение жизни приложения?

1 Ответ

2 голосов
/ 09 января 2010

Я мог бы неправильно истолковать ваш вопрос, но звучит так, будто вы сначала делаете вызов PHP-скрипта из вашей Flash, а позже вы делаете второй вызов PHP-скрипта из Flash и ожидаете, что определенная переменная быть установленным?

Если это так, то это тоже проблема. PHP не имеет состояния. Каждый раз, когда вы получаете доступ к сценарию PHP (то есть запрашиваете URL), среда PHP создается заново. Как только запрос выполнен и скрипт PHP завершен, среда уничтожается (т. Е. Поток веб-сервера закрывается, а среда PHP теряется). Все, что вы установили или делаете в своем первом запросе, не будет существовать в вашем втором запросе.

Если вы хотите, чтобы информация сохранялась, вы можете использовать сеансы или файлы cookie. Поскольку вы используете Flash, сессий , вероятно, лучший путь. При первом вызове сценария сгенерируйте токен сеанса и передайте его во флэш-память вместе с вашим ответом. Во всех последующих вызовах ваш Flash должен предоставлять токен сеанса, и вы можете хранить / извлекать любые переменные состояния, которые вам нужны, из $ _ SESSION .

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