有什么区别bw使用$ this-> somevariable和somevariable用于在php中存储新创建的对象

时间:2013-08-15 15:06:32

标签: php oop

有人可以解释一下用php编写的以下两个代码片段的区别吗? 一个使用$ this->任务,另一个使用$ tasks来存储对象。

 class Foo
{
public $tasks;

function doStuff()
{
    $this->tasks = new Tasks();
    $this->tasks->test();
}

}

vs

class Foo
{
public $tasks;

function doStuff()
{
    $tasks = new Tasks();
    $tasks->test();
}

}

6 个答案:

答案 0 :(得分:4)

当不使用$ this时,你正在使用一个局部变量,当函数doStuff完成时它将消失。当你使用$ this时,当一个类Foo的实例消失时,该变量将消失。

方法1

$foo = new Foo();
$foo->doStuff();
echo $foo->tasks  --  tasks will be a new instance of Tasks

方法2

$foo = new Foo();
$foo->doStuff();
echo $foo->tasks  --  tasks will be NULL

答案 1 :(得分:1)

第一个使Tasks对象成为类Foo的属性。您可以在函数外部访问它。

http://php.net/manual/en/language.oop5.properties.php

在第二个中,您创建的变量用于保存对象,其范围仅是类的方法。在方法之外无法访问它。

http://php.net/manual/en/language.variables.scope.php

答案 2 :(得分:1)

如果您想从课程外的Tasks访问Foo,请使用this。否则,只能在doStuff()中访问。

答案 3 :(得分:0)

在第二个片段中,$ tasks变量不应该在其他函数中可访问,因为您没有设置object属性而只是一个局部变量。

答案 4 :(得分:0)

在第一个中使用类变量$ tasks但在第二个中你创建了一个新的变量,它是函数doStuff()的本地变量

答案 5 :(得分:0)

如果不在PHP中使用$this关键字,则无法访问类变量。

使用普通变量名称意味着它是该函数的本地函数,不像其他编程语言(如Java),如果它在当前作用域中找不到变量名,它将尝试外层作用域。