php 静态类调用,php – 从类中静态调用实例方法

根据其中一个手册页

http://www.php.net/manual/en/language.oop5.static.php:

Calling non-static methods statically generates an E_STRICT level warning.

但是,当从类内部进行调用时,情况似乎并非如此:

error_reporting(-1);

class Test {

private $id;

function __construct($id) { $this->id = $id; }

function id() { return $this->id; }

function __toString() {

return Test::id()

. self::id()

. static::id()

. static::id()

. call_user_func('Test::id')

. call_user_func(array('Test', 'id'));

}

}

$a = new Test('a');

$b = new Test('b');

echo "$a $b $a"; # aaaaaa bbbbbb aaaaaa

var_dump(error_get_last()); # NULL

用php 5.4测试

我相信我已证明:

>未生成E_STRICT警告

>那个php神奇地将静态方法调用更正为实例方法调用(访问实例变量id证明了这一点).

编辑-

我想补充说,在__toString调用中插入debug_backtrace()会产生一个名为“>”的调用“类型”,这意味着“方法调用”.

这是一个错误,还是一个记录的功能?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值