什么是变量独立$这意味着在CodeIgniter中的方法

时间:2016-02-20 15:37:18

标签: php codeigniter this

我很困惑独立变量$this在某些CodeIgniter函数中实际意味着什么。我用箭头了解$this,但我不知道如何在函数中使用$this。例如,

function update_entry()
{
    $this->title   = $_POST['title'];
    $this->content = $_POST['content'];
    $this->date    = time();

    $this->db->update('entries', $this, array('id' => $_POST['id']));
}

1 个答案:

答案 0 :(得分:0)

从字面上看,无法在函数中使用$this

$this伪变量,它引用对象,或者更确切地说是类实例。

您可以在方法中使用不在函数内部。

然而,您的误解是完全合法的,因为在php方法中通过... function关键字声明!唯一的语法区别是类中的“函数”是一个方法,而类外的函数是......一个函数。

示例:

<?php
    class MyClass
    {
        public $var = 'Hello';

        /* echo() is a MyClass method */
        function echo()
        {
            echo $this->var;                     // <-- $this inside class: valid
        }
    }

    echo $this;                                  // <-- $this outside class: NOT valid

    /* test() is a function */
    function test()
    {
        echo $this;                              // <-- $this inside function: NOT valid
    }
?>

$this引用类的实例,因此,在此示例中:

$obj = new MyClass();
$obj->test();                                    // <-- Output: "Hello"
$obj->var = "Hello World";
$obj->test();                                    // <-- Output: "Hello World"

$obj2 = new MyClass();
$obj2->test();                                   // <-- Output: "Hello"
$obj2->var = "Hello Baby";
$obj2->test();                                   // <-- Output: "Hello Baby"

$this是对象$obj$obj2的引用,而不是对通用声明类的引用:引用当前类而不是对象必须使用self而不是$this

换句话说,您必须对非静态成员使用$this,对静态成员使用self

编辑:

当&#34; $ this&#34;独自站在一个方法中。

见这个例子:

class Called
{
    public $var = 'Hello Baltimora';

    function echo( $obj )
    {
        echo $obj->var;
    }
}

class Caller
{
    public $var = 'Hello San Francisco';

    function echo( $obj )
    {
        $obj->echo( $this );
    }    
}

$called = new Called();
$caller = new Caller();

$caller->echo( $called );

在班级Caller中,方法echo$this(对自己的实例的引用)传递给另一个类方法(Called->echo,实例化为$called) :在调用方法内部,Caller实例($caller)已分配给$obj变量并用于检索其$var变量。

因此,$caller->echo( $called )将输出“Hello San Francisco”。