PHP中的提升(Hoisting)

PHP中存在类似于JS中的提升(Hoisting)情况,但并不适于所有情况。

<?php
echo "$bool,$string,$integer,$float,$array";
echo '<hr />';
var_dump(is_object($object));
echo '<hr />';
var_dump(class_exists('father'));
var_dump(class_exists('boy'));
var_dump(class_exists('girl'));
var_dump(function_exists('great_function'));
var_dump(function_exists('poor_function'));

die();
exit();

$bool = true;
$string = 'string hoists';
$integer = 100;
$float = 1.11;
$array = array('array hoists');

class girl extends father{};
class father {}
class boy extends father{}
$object = new father();

function great_function () {
  echo "function hoists";
}
$poor_function = function(){

}

 

 

个人理解:

在文件被执行前,PHP的解释器首先逐行审查代码,遇到简单的类型——比如前五种——不提升,因为比较简单,实际代码执行的时候再说吧。

然后看到class,这个东西需要提升一下,girl继承的是father这个类,但father是什么?我不认识,算了,这行没法提升。继续走,father这个类,是一个原类(我自己起的名字),没问题,提升!继续往下,boy这个类继承了father,没关系,father我已经认识了,那这个也可以提升。
然后遇到object,这个后面的new是实例化的意思,实际代码执行的时候再实例化,我不管,跳过。

遇到function,这个需要提升一下。

 

总结:

1. PHP中只有class和function存在部分提升。提升声明,但是不提升赋值。

2. 对于class的提升,任何原类都可以完全提升(father),但对于继承原类的子类来讲,如果继承的时候,原类已经提升,那子类可以正常提升(boy),反之则不可以(girl)。

3. 对于function的提升,只声明的function可以提升(great_function),又声明又赋值的function不可以提升(poor_function)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值