【问题标题】:Confused with $this and self in PHP [duplicate]在 PHP 中对 $this 和 self 感到困惑 [重复]
【发布时间】:2013-05-03 11:34:24
【问题描述】:

PHP中的$this和self有什么区别?

当我在php.net 上阅读static keyword 时,我对以下句子感到困惑。

$this 在声明为静态的方法中不可用。

为什么这样做时 $this 不可用?

任何帮助将不胜感激!

谢谢!

【问题讨论】:

标签: php oop


【解决方案1】:

$this 用于调用非静态变量和方法。

self用于调用静态变量和方法。

When to use self over $this?

【讨论】:

  • 感谢您的回答!您提供的链接很棒!
【解决方案2】:

$this 用于访问类的非静态成员函数和成员属性

同时

self 用于访问类的静态成员和静态函数。

在使用静态时需要记住的一点是,静态成员只能由静态方法访问,而不能由类的其他成员函数(非静态)访问。

【讨论】:

    【解决方案3】:

    另一个有趣的方面是,还有一个可以使用的static 范围,它引用调用类上下文的类,而不是定义的类上下文。所以代码:

    class A {
        public static function createNew(){
           return new self();
        }
    }
    
    class B extends A {
    }
    
    $test = B::createNew(); // This will actually yield an instance of A
    

    但如果 A 类被定义为

    class A {
        public static function createNew(){
           return new static();
        }
    }    
    

    然后$test = B::createNew(); 将产生一个 B 的实例,如您所料。

    这也与静态属性有关,当有继承时self::$propertystatic::$property 可能意味着两个完全不同的东西。

    如果继承和静态属性/方法在起作用,重要的是要知道区别,根据我的经验,self 在这些情况下几乎总是错误的,它可能导致一些有趣的错误,只有当类层次结构在给定时间起作用。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多