帮助我理解PHP中如何使用这个

时间:2010-08-27 06:30:49

标签: php oop variables this

用简单的英语,PHP中如何使用$this

在JavaScript中这对我来说是一个如此简单的概念,但由于某些原因在PHP中我无法理解这个变量及其功能。在任何给定的点上,它指的是完全?我只有OOP的三级经验,我怀疑这就是为什么我很难理解它的用法,但我想要变得更好,我检查的很多代码都使用这个变量。

2 个答案:

答案 0 :(得分:15)

非常简单的英语:

进入对象的函数后,您可以完全访问其变量,但要设置它们,您需要比仅使用要使用的变量名更具体。要正确指定要使用局部变量,需要使用特殊的$this变量,PHP始终将其设置为指向您当前使用的对象。

例如:

function bark()
{
    print "{$this->Name} says Woof!\n";
} 

每当你进入一个对象的函数时,PHP会自动设置包含该对象的$this变量。您无需执行任何操作即可访问它。


在普通英语中:

$this是一个伪变量,在从对象上下文中调用方法时可用。它是对调用对象的引用(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)

示例:

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}

class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();

// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
$b = new B();
$b->bar();

// Note: the next line will issue a warning if E_STRICT is enabled.
B::bar();
?>

<强>输出:

$this is defined (A)
$this is not defined.
$this is defined (B)
$this is not defined.

答案 1 :(得分:2)

详细说明shamittomar:

$这是一个句柄,可以引用调用的当前对象。(所以它基本上指向自己。假设我们有同一个类的多个对象,我们想要设置它在我们做最终动作之前(不同的)数据:回应它。 当你不知道对象名称时,很难指出自己。

class SaySomething{
        private $the_line;// the variable exists only in this class!
        public function __construct($myline){
            $this->the_line = $myline;
           // see how it points to itself?
           // would there be a variable in the global scope then it would be not possible to "setup"
           // the object without it getting overwritten in the next setup.
        }

        //The function to echo the stuf. Can be callid by the "outside world"
        public function say_it(){
            echo $this->the_line;
            $this->add_exclamation();//call the function add_exclamation in this class/object.
        }

       //This function can not be called by the outside world because it's private.
       // The only way to call it is from inside this class. To point to this class and call the function:
       // $this->add_exclamation();
        private function add_exclamation(){
            echo "!";
        }

    }

    $obja = new SaySomething('my');
    $objb = new SaySomething('sample');
    $objc = new SaySomething('super');
    $objd = new SaySomething('text');

    //Mind: uptill nothing has been said, only the private variable $the_line has been set in the constructor.
    $obja->say_it();
    $objc->say_it();
    $objb->say_it();
    $objd->say_it();

要了解一个类和一个对象是什么(它们往往混淆了很多......)观看此幻灯片: http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model