php static 类_php 类方法用static::hello(); 等同于 $this->hello();吗?

自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。

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();

以上例程会输出:

A

可以实现在父类中调用子类的静态方法的作用。

后期静态绑定本想通过引入一个新的关键字表示运行时最初调用的类来绕过限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。最终决定不引入新的关键字,而是使用已经预留的 static 关键字。

在非静态环境下,所调用的类即为该对象实例所属的类。由于 $this-> 会在同一作用范围内尝试调用私有方法,而 static:: 则可能给出不同结果。另一个区别是 static:: 只能用于静态属性。

class A {

private function foo() {

echo "success!\n";

}

public function test() {

$this->foo();

static::foo();

}

}

class B extends A {

/* foo() will be copied to B, hence its scope will still be A and

* the call be successful */

}

class C extends A {

private function foo() {

/* original method is replaced; the scope of the new one is C */

}

}

$b = new B();

$b->test();

$c = new C();

$c->test(); //fails

以上例程会输出:

success!

success!

success!

Fatal error: Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值