PHP Class self 与 static 异同与使用详解 |
|
对于大多数 PHPer 来说,self 与 static 两个 PHP 关键词都不算陌生 。我们学会通过 这也是我之前的认知 。 现在我们来回顾一下这两个关键词的一些常见用法:
// self 用法 1 :调用静态成员属性
class Person
{
protected static $maxAddressCount = 5; // 收获地址创建最大数量 。
public function test()
{
echo self::$maxAddressCount;
}
}
$person = new Person();
$person->test();
// self 用法 2 :调用静态方法
class Person
{
protected static $maxAddressCount = 5; // 收获地址创建最大数量 。
protected static function getMaxAddressCount()
{
return self::$maxAddressCount;
}
public function test()
{
echo self::getMaxAddressCount();
}
}
$person = new Person();
$person->test();
// self 用法 3 :创建一个当前对象
// 单例示例
class Person
{
private static $instance = null;
private function __construct() {}
final public static function getInstance()
{
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
public function test()
{
echo "hello world!";
}
}
$person = Person::getInstance();
$person->test();
关于 static 关键词的常见用法也在上面 3 个示例中得到综合体现 我深信上面的用法,任何一个入门的 PHPer 都是非常熟悉的 。现在我要讲的是以下两种方式:
我相信很多人都知道 关于 PHP 官方把这种方式称为:后期静态绑定 。 官方示例 1:
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
因为 Class B 继承了 Class A 。 A 与 B 都有一个静态方法 因为子类 Class B 的静态方法 就这引出了后期静态绑定的概念 。 官方示例 2:
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期静态绑定从这里开始
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
我们把 Class A 里面的 大家可以通过运行以上两个示例进行理解 。 之所以会有本篇小节内容 。是因为我在实际运行当中要继承单例方法导致了这个问题 。所以,才牵扯出这个特性 。 到此这篇关于PHP Class self 与 static 异同与使用详解的文章就介绍到这了,更多相关PHP Class self 与 static 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! |