2016-06-22 2 views
-1

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

Если функция ниже в PHP выполняется, свойство набора объектов исчезает. Как это работает?

class test{ 
    public $prop1; 

    function test1($prop){ 

     $prop1 = $prop; 

     $this->prop1 = $prop1; 
    } 
} 
$test = new test(); 
$test->test1("string"); 
echo $test->prop1; 

Как вы можете видеть пример кода выше, он хранит переменную «$ prop» в свойстве «prop1».

Но после выполнения свойства исчезают, а переменная $ prop1 также исчезает.

Можете ли вы объяснить механизм этого?

Или я пропустил что-то очень основное в программировании?

Заранее спасибо.

+1

Что именно вы имеете в виду под "после выполнения"? Покажите нам код, в котором вы создаете экземпляр этого класса и вызываете этот метод, и затем проверяете это значение, чтобы найти, что оно исчезло. – Vrac

+0

Я только что отредактировал. Спасибо –

+0

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

ответ

1

PHP использует garbage collector. Когда переменная становится недоступной, она уничтожается.

Что касается вашего кода - значение аргумента $prop не будет уничтожено после завершения метода test1(), потому что вы храните его в собственности $prop1. $test->prop1 по-прежнему доступен после test1() выходов (даже если не напрямую).

class test 
{ 
    private $prop1; 

    function test1($prop) 
    { 
     $prop1 = $prop; 

     $this->prop1 = $prop1; 
    } 
} 

$test = new test(); 

$test->test1('hello'); 

var_dump($test); 

Выход:

object(test)#1 (1) { 
    ["prop1":"test":private]=> 
    string(5) "hello" 
} 
+0

ой! Раньше я не знал о сборщике мусора. Большое спасибо!!! –

0

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

Fatal error: Cannot access private property test::$prop1 in xxx.php on line x

Но сообщения об ошибках выключен (или направляется в лог-файл, который не проверяется;)) echo $test->prop1; не выполняет, и там не выводится из программы, создавая впечатление, что переменная пуста.

error_reporting(E_ALL); приведет к сбою программы с соответствующим сообщением.

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