有人可以解释一下用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();
}
}
答案 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
在第二个中,您创建的变量用于保存对象,其范围仅是类的方法。在方法之外无法访问它。
答案 2 :(得分:1)
如果您想从课程外的Tasks
访问Foo
,请使用this
。否则,只能在doStuff()
中访问。
答案 3 :(得分:0)
在第二个片段中,$ tasks变量不应该在其他函数中可访问,因为您没有设置object属性而只是一个局部变量。
答案 4 :(得分:0)
在第一个中使用类变量$ tasks但在第二个中你创建了一个新的变量,它是函数doStuff()的本地变量
答案 5 :(得分:0)
如果不在PHP中使用$this
关键字,则无法访问类变量。
使用普通变量名称意味着它是该函数的本地函数,不像其他编程语言(如Java),如果它在当前作用域中找不到变量名,它将尝试外层作用域。