2011-08-24 149 views
12

愚蠢的问题,我知道,

从所有他们没有解释他们为什么使用$此教程。

$是否像Codeigniter中的基类一样?

任何解释都会受到欢迎! :)

感谢

+3

http://www.php.net/manual/en/language.oop5.basic.php介绍'$ this'本身。 – mario

回答

1

我刚刚读了一篇关于$本和类一般:http://query7.com/using-this-in-php

在PHP中,关键字“$这个”被用作一类的自参考和 您可以使用它来调用和使用以下示例中显示的 这些属性和方法。

7

$this在PHP中是当前对象。在类定义中,您使用$this来处理当前对象。拿这个类为例:

class Hello { 
    public $data = 'hello'; 
    function hi() { 
    $this->data = 'hi'; 
    } 
} 

您可以多次实例化这个类,但$data只会在那些对象更改为hi,你调用的函数:

$one = new Hello; 
$two = new Hello; 
$two->hi(); 

echo $one->data, "\n", $two->data; 
+2

当然这是关于'$ this'通用含义的精美教程,但并没有专门针对codeigniter,这就是问题所在。 – jondavidjohn

6

$this不来自CodeIgniter,但来自PHP。 $this引用当前对象。

当你创建这样一个实例:

$something = new SomeClass(); 

然后$this指的是从SomeClass创建的,在这种情况下$something实例。每当你在课堂上时,你可以使用$this来引用这个实例。 所以:

class SomeClass { 

    public $stuff = 'Some stuff'; 

    public function doStuff() 
    { 
    $this->stuff; 
    } 

} 
+0

感谢,所以基本上它类似于C++在这个意义上this.stuff() – sqlmole

+0

我没有使用C++的经验,但是,它可能以相同的方式实现'this'。 – Luwe

4

CI中的术语:
你会发现,在笨每个控制器扩展了基控制器类。在控制器中使用$this可让您访问控制器中定义的所有内容,以及从基本控制器继承的内容。

大多使用,你会离开$this的涉及调用其基类加载你的方法 -

如果我没有记错,在视图中的PHP代码在运行$this->load$this->uri等。控制器的上下文,因此您可以从那里访问控制器对象$this

+0

如果我们不写'$ this'会怎么样呢?由于其在C++中的工作?我们可以使用'this'或不使用'this'来编写任何数据成员,在C++中我们可以在PHP中做什么? –

+0

@BilalMaqsood - 不,PHP不支持该语法。 –

17

要实际上答案您的问题,$this实际上代表单身Codeigniter实例(实际上是控制器对象)。

例如,当您加载库/模型时,您将它们附加到此实例,以便您可以将它们作为此实例的属性引用。

在codeigniter中获取此实例的另一种方法是在构建可移植库时使用的get_instance()函数。

0

这是从本身内引用类的实例的方式,与许多其他面向对象的语言一样。从PHP文档:当在对象上下文中调用方法时,伪变量$ this可用。 ... $这主要用于引用一个类别的属性

+0

这并没有增加6年前这个问题的答案。 –