执行后对象重置的原因是什么?编辑

时间:2016-06-22 00:50:42

标签: php object methods execute

我对编程并不陌生,但我发现自己质疑一个函数在执行后如何重新启动。我被告知,每次方法启动时,属性或变量集都会在运行方法时重置。

如果PHP中的下面的函数执行,则对象集的属性将消失。 它是如何工作的?

class test{
    public $prop1;

    function test1($prop){

        $prop1 = $prop;

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

正如您可以看到上面的示例代码,它存储变量" $ prop" at property" prop1"。

但执行后,属性消失,变量$ prop1也消失了。

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

或者我是否会错过一些非常基本的编程?

提前致谢。

2 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分:0)

该属性需要公开,或由公共getter返回,以便在类外访问它。通常,代码将失败并显示消息:

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

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

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