代码之家  ›  专栏  ›  技术社区  ›  Peter D

为什么在PHP中引用同一类中的方法或变量时需要使用$this?

  •  1
  • Peter D  · 技术社区  · 15 年前

    我正在向一个Java开发人员解释为什么他的方法调用不起作用。他只需要补充一下 $this->method_name();

    然后他问我,, “为什么我需要补充 美元这个 当方法在同一类中声明时,该方法是否会发生错误?”

    我真的不知道怎么回答。可能是因为PHP有一个全局名称空间,您需要显式地告诉它您正在寻找的方法属于当前类?但是为什么PHP在查看全局名称空间之前不检查当前类中的方法呢?

    5 回复  |  直到 13 年前
        1
  •  10
  •   phidah    15 年前

    问题还在于,如果您声明 function foo() 和一种方法 foo() PHP很难找出你的意思-考虑这个例子:

    <?php
    function foo()
    {
        echo 'blah';
    }
    
    class bar
    {
        function foo()
        {
             echo 'bleh';
        }
        function bar()
        {
             // Here, foo() would be ambigious if $this-> wasn't needed.
        }
    }
    ?>
    

    因此,基本上你可以说PHP——因为它的“非100%——面向对象”(意味着你也可以在类之外拥有函数)——有这个“特性”:

        2
  •  4
  •   Emil H    15 年前

        3
  •  3
  •   gnud    15 年前

    这并不罕见。Python、Javascript、Perl(和其他)都让您引用 this self 在处理对象时。

        4
  •  1
  •   Annika Backstrom    15 年前

    这就是PHP中scope的工作原理。 $obj->f() $foo 在功能范围内。如果要获取类属性 $obj->foo 在内部 f() ,是的 $this->foo .

    global $foo;
    $foo = 99;
    
    class myclass
    {
        public $foo;
    
        function f()
        {
            $this->foo = 12;
            $foo = 7;
    
            // $this->foo != $foo != $GLOBALS['foo']
        }
    }
    
        5
  •  0
  •   canen    15 年前

    $this指的是调用对象。这个 PHP docs 有好的例子和进一步的细节。