详解php中static和self的区别

static指向运行时类

self指向定义时的类

static引用运行时上下文中的类。也就是说,如果static使用位置是静态方法,则指向接收者的类,通常的实例方法时指接收器是对象,所以指该类。

另一个self在其定义上下文中引用类。

详解php中static和self的区别

让我们在实例代码中看一下。

class User
{

  public static function loadByName($name)
  {
    $id = self::getIdForName($name);
    return new static($id);
  }

  public static function getIdForName()
  {
    print __METHOD__ . PHP_EOL;
  }

  public function __construct($id)
  {
    print __METHOD__ . PHP_EOL;
  }

}

class AdminUser extends User
{

  public static function getIdForName()
  {
    print __METHOD__ . PHP_EOL;
  }

  public function __construct($id)
  {
    print __METHOD__ . PHP_EOL;
  }

}

$admin1 = AdminUser::loadByName('张三');
// =>
// User::getIdForName
// AdminUser::__construct

因为调用getIdForName()时使用self,所以即使从AdminUser调用loadByName(),调用的方法也是User的getIdForName()(而不是AdminUser的getIdForName())。

本文来源:词雅网

本文地址:https://www.ciyawang.com/php-100.html

本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。

相关推荐