为什么对象在执行后会重置?编辑

why an object resets after execution? edited

我不是编程新手,但我发现自己在质疑函数在执行后如何重新启动。有人告诉我,每次方法启动时, 属性 或变量设置,同时方法 运行 重置。

如果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也消失了。

你能解释一下这个机制吗?

还是我错过了一些非常基础的编程?

提前致谢。

属性 需要是 public,或者由 public getter 返回,以便在 class 之外访问它。通常代码会失败并显示消息:

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

但是关闭了错误报告(或被定向到一个未被检查的日志文件 ;))echo $test->prop1; 没有执行,程序也没有输出,给人的印象是该变量为空。

error_reporting(E_ALL); 将使程序失败并显示相应的消息。

PHP 使用 garbage collector。当一个变量变得不可访问时,它就会被销毁。

关于您的代码 - $prop 参数的值在方法 test1() 完成后不会被销毁,因为您将它存储在 $prop1 属性 中。 $test->prop1test1() 退出后仍然可以访问(即使不是直接退出)。

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"
}