2013-10-12 6 views
0

Я начинаю с объектов в PHP, и мне было интересно, когда они удаляются. Это когда файл PHP заканчивает загрузку или когда он заканчивается функцией, которую я вызываю? в любом случае, чтобы сохранить объект в живых, поэтому его можно вызвать в другом экземпляре, когда файл загружен.Когда объекты PHP умирают?

+3

Нет ничего похожего на [чтение руководства] (http://php.net/manual/en/features.gc.php), который также является лучшим хитом для «Сборки мусора PHP» на A Famous Поисковый движок. :-) –

+3

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

+1

Где идут объекты PHP, когда они умирают? Они не едут на небеса, где летают ангелы, Перейти к огненному огню и обжариванию, Смотрите их снова 'до 4 июля – AbraCadaver

ответ

3

Между объектами умирает и объекты не входят в сферу применения.

Если вы заинтересованы в логистике управления памятью и сборкой мусора в PHP, то как T.J. Кроудер указал, что вы можете прочитать the manual on garbage collection in PHP.

Если, с другой стороны, вас больше интересует область переменных, тогда ответ заключается в том, что область переменных обычно ограничена блоком, в котором они объявлены. Но вы также можете создавать глобальные переменные и обращаться к ним с помощью global ключевое слово внутри функций - хотя глобальные переменные обычно плохая идея. См. the manual.

И что касается сохраняющихся переменных за сценарием, это может быть достигнуто только через какой-то механизм хранения. В контексте веб-приложений, которые обычно выполняются с использованием session state, но будьте осторожны, чтобы нюансы сохраняющихся объектов от одного сеанса до следующего (то есть одного вызова сценария к следующему) могут отличаться в зависимости от того, сохраняется ли состояние сеанса в процессе или вне процесса. В случае, если это последний, объекты будут сериализованы и десериализованы, что делает вещи немного более сложными.

-2

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

/** 
* Singleton class 
* 
*/ 
final class UserFactory 
{ 
    /** 
    * Call this method to get singleton 
    * 
    * @return UserFactory 
    */ 
    public static function Instance() 
    { 
    static $inst = null; 
    if ($inst === null) { 
     $inst = new UserFactory(); 
    } 
    return $inst; 
} 

/** 
* Private ctor so nobody else can instance it 
* 
*/ 
private function __construct() 
{ 

} 
} 

Применения: пример

$fact = UserFactory::Instance(); 
$fact2 = UserFactory::Instance(); 
$fact == $fact2; 

кода взят из https://stackoverflow.com/a/203359/1291995

+0

Ссылка на подсчет '! =' Сбор мусора. Для большинства целей объект PHP разрушается и освобождается из памяти *, как только счетчик ссылок достигает нуля *. Отдельный «сборщик мусора» только ногами в циклических ссылок, которые никогда не могут достичь счетчик ссылок равен нулю. – IMSoP

+0

1. Я не сказал количество ссылок == gc. 2. Это то, что я сказал, выпущен, когда ref переходит в 0. Я не вижу, каково ваше возражение здесь – Omiga

+0

Ваш ответ начинается с фразы «PHP vars - сбор мусора». Я думаю, что подсчет ссылок является одной из форм сбора мусора в некотором смысле, но они обычно не используются взаимозаменяемо, особенно потому, что PHP имеет как для разных целей. – IMSoP

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