作者:最佳乔海燕 | 来源:互联网 | 2020-09-03 13:46
php中self关键字的用法是:1、替代类名,引用当前类的静态成员变量和静态函数;2、抑制多态行为,引用当前类的函数而非子类中覆盖的实现。self总是指向当前类(及类实例)。
php中self关键字的用法是:1、替代类名,引用当前类的静态成员变量和静态函数;2、抑制多态行为,引用当前类的函数而非子类中覆盖的实现。self总是指向当前类(及类实例)。
用法:
self总是指向“当前类(及类实例)”。
详细介绍:
1、替代类名,引用当前类的静态成员变量和静态函数;
2、抑制多态行为,引用当前类的函数而非子类中覆盖的实现;
下面我们通过实例来与 parent 、 static 以及 this进行对比。
parent
self 与 parent 的区分比较容易: parent 引用父类/基类被隐盖的方法(或变量), self则引用自身方法(或变量)。例如构造函数中调用父类构造函数:
class Base {
public function __construct() {
echo "Base contructor!", PHP_EOL;
}
}
class Child {
public function __construct() {
parent::__construct();
echo "Child contructor!", PHP_EOL;
}
}
new Child;
// 输出:
// Base contructor!
// Child contructor!
static
static 常规用途是修饰函数或变量使其成为类函数和类变量,也可以修饰函数内变量延长其生命周期至整个应用程序的生命周期。但是其与 self 关联上是PHP 5.3以来引入的新用途:静态延迟绑定。
有了 static 的静态延迟绑定功能,可以在运行时动态确定归属的类。例如:
class Base {
public function __construct() {
echo "Base constructor!", PHP_EOL;
}
public static function getSelf() {
return new self();
}
public static function getInstance() {
return new static();
}
public function selfFoo() {
return self::foo();
}
public function staticFoo() {
return static::foo();
}
public function thisFoo() {
return $this->foo();
}
public function foo() {
echo "Base Foo!", PHP_EOL;
}
}
class Child extends Base {
public function __construct() {
echo "Child constructor!", PHP_EOL;
}
public function foo() {
echo "Child Foo!", PHP_EOL;
}
}
$base = Child::getSelf();
$child = Child::getInstance();
$child->selfFoo();
$child->staticFoo();
$child->thisFoo();
程序输出结果如下:
在函数引用上, self 与 static 的区别是:对于静态成员函数, self 指向代码当前类, static 指向调用类;对于非静态成员函数, self 抑制多态,指向当前类的成员函数, static 等同于 this ,动态指向调用类的函数。
更多相关知识,可以访问 第一PHP社区 。
以上就是php中self关键字的用法是什么的详细内容,更多请关注 第一PHP社区 其它相关文章!