【问题标题】:Is there a shortcut syntax for accessing object methods from within an object scope in PHP?是否有用于从 PHP 的对象范围内访问对象方法的快捷语法?
【发布时间】:2012-07-18 14:58:31
【问题描述】:

我只是根据使用其他语言的经验来询问,这些语言可以根据类范围来区分方法调用和全局函数调用 - 例如:

class Foo {
 function bar(){
   echo 'bletch';
 }

 function baz(){
   $this->bar();
 }
}

所以我想我在问是否有另一种方式来处理$this->bar(),或者换句话说,我怎么能省略$this,考虑到上下文,这似乎是多余的?

【问题讨论】:

    标签: php methods


    【解决方案1】:

    不,如果没有 PHP 中的 $this->,您将无法从 baz() 内部访问 bar(),因为您可以轻松拥有不属于任何类/对象的全局函数 bar()(这是与大多数您引用的那些语言),这将导致冲突。

    【讨论】:

    • 可以使用self:: 代替$this->,如stackoverflow.com/questions/151969/php-self-vs-this 中所述
    • self:: 运算符正在访问类本身(属于该类的静态方法、属性和常量),而 $this-> 正在访问实例(实例方法和属性,例如问题)。
    • 谢谢,正在检查。其他语言可以根据类范围消除全局范围函数的歧义(偏爱具有最紧密范围的方法/函数)。我想知道正式的命名空间是否可以在这里有所帮助,但坦率地说,无论哪种方式都可能不值得头疼。只是检查以防我一路上错过了一个技巧。
    【解决方案2】:

    简而言之,这是不可能的。

    因为调用 bar 会在给定以下的类之外调用名为 bar 的函数:

    function bar() {
     echo 'foo';
    }
    
    class Foo {
     function bar(){
       echo 'bletch';
     }
    
     function baz(){
       $this->bar();
     }
    
     function foobar() {
       bar();
     }
    }
    
    $instance = new Foo();
    
    $instance->foobar();
    

    这将回显function bar()foo 而不是method bar()bletch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多