代码之家  ›  专栏  ›  技术社区  ›  dclowd9901

帮助我理解$this是如何在PHP中使用的

  •  5
  • dclowd9901  · 技术社区  · 14 年前

    用通俗易懂的英语,你觉得怎么样 $this 在PHP中使用?

    在JavaScript中这是一个非常简单的概念,但是在PHP中由于某些原因,我无法理解这个变量及其函数。在任何一点上,它指的是什么 确切地 ? 我只有面向对象编程的第三级经验,我想这就是为什么我很难理解它的用法,但我正在努力做得更好,我检查的很多代码都使用这个变量。

    2 回复  |  直到 14 年前
        1
  •  16
  •   shamittomar    14 年前

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

    例如:

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

    无论何时在对象的函数中,PHP都会自动设置 $这个 变量包含该对象。您不需要做任何事情就可以访问它。


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

    <?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.
    
        2
  •  2
  •   Deefjuh    14 年前

    详细说明shamittomar:

    $这是一个句柄,可以引用在其中完成调用的当前对象。(所以它基本上指向自己。假设我们有同一个类的多个对象,我们想在做最终的移动之前用(不同的)数据来设置它:echo it。 当您不知道对象名称时,很难指向它自己。

    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