3

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

 class Foo
{
public $tasks;

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

}

对比

class Foo
{
public $tasks;

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

}
4

6 回答 6

4

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

方法一

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

方法二

$foo = new Foo();
$foo->doStuff();
echo $foo->tasks  --  tasks will be NULL
于 2013-08-15T15:07:59.697 回答
1

第一个使Tasks对象成为类的属性Foo。您将能够在函数之外访问它。

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

在第二个中,您正在创建一个变量来保存对象,它的范围只是类的方法。它在方法之外是不可访问的。

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

于 2013-08-15T15:09:14.073 回答
1

如果您想TasksFoo课堂外访问,请使用this. 否则只能在doStuff().

于 2013-08-15T15:10:07.317 回答
0

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

于 2013-08-15T15:08:40.007 回答
0

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

于 2013-08-15T15:09:26.997 回答
0

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

使用普通变量名意味着它是该函数的本地变量,这与 Java 等其他编程语言不同,如果在当前范围内找不到变量名,它将尝试外部级别范围。

于 2013-08-15T15:09:46.370 回答