Время жизни статической переменной - PullRequest
0 голосов
/ 10 октября 2011

Я просматриваю книгу по Joomla, и я встретил следующий фрагмент кода в главе шаблона MVC:

class QuizController extends JController
{
    static function &getInstance(/* some PHP code... */)
    {
        // use a static array to store controller instances
        static $instances;

        if (!$instances)
        {
            $instances = array();
        }

        /* some PHP code... */

        // return a reference to the controller
        return $instances[$class];
    }
}

Каков срок жизни $instances? Когда он уничтожен?

Если он активен в течение срока действия запроса, тогда объявление $instances static не имеет смысла, потому что этот код будет запущен один раз.
Если он активен во время сеанса пользователя, как движок PHP узнает об этом?

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Судя по виду кода, переменная сохраняется до завершения выполнения скрипта.

Поскольку вы не можете получить доступ к переменной извне этой функции, и к этой переменной не обращаются unset(), она не будет уничтожена до конца выполнения скрипта.

0 голосов
/ 10 октября 2011

Если он жив в течение срока действия запроса, то объявление $ instances static не имеет смысла, потому что этот код будет запущен один раз.

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

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

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