php 语句辨析

甲: php new self() 和 new static() 的区别

<?php
/* new self() 和 new static() 的区别.
 * 这两个函数都是创建一个对象的意思,但到底是什么差别
 */
class Base {

    public function getNewSelf() {
        return new self();
    }

    public function getNewStatic() {
        return new static();
    }

}

class Extend1 extends Base
{
}

class Extend2 extends Base
{
}
$b = new Base();
echo "base getNewSelf ret:". get_class($b->getNewSelf()) ."\n";
echo "base getNewStatic ret:".get_class($b->getNewStatic()) ."\n";

$e1 = new Extend1();
echo "e1 getNewSelf ret:". get_class($e1->getNewSelf()) ."\n";
echo "e1 getNewStatic ret:".get_class($e1->getNewStatic()) ."\n";
$e2 = new Extend2();
echo "e2 getNewSelf ret:". get_class($e2->getNewSelf()) ."\n";
echo "e2 getNewStatic ret:".get_class($e2->getNewStatic()) ."\n";
/*
 * 输出结果:
 * base getNewSelf ret:Base
 * base getNewStatic ret:Base
 * e1 getNewSelf ret:Base
 * e1 getNewStatic ret:Extend1
 * e2 getNewSelf ret:Base
 * e2 getNewStatic ret:Extend2
 *
 * 结论: new self() 创建的是基类对象. 再多的继承也是一样.
 * 		new static() 创建的是子类对象.
 */
?>


乙: php: 赋值语句与 ?: 表达式辨析举例.


在C语言下也用惯了?:表达式, 但在php下看到如下这些写法,还是令我晕菜了一阵, 大概是$a = $a 这种形式造成的.


$module = $module ? $module . DS : '';


这句话看着别扭, 在于解释的优先级别, 还得解释一下意思.
给$module 赋值(优先级较低), $module 有值(真),给$module后面加上一'/'(在linux下DS(目录分隔符)就是/), 无值(假),把''付给$module

同样分析下面一句


$range = $range ?: self::$range;


$range 为真吗? 为真保持不动,为假把self::$range 付给$range.

丙: array_key_exists 与 isset 辨析


<?php
$arr = array( 'one'=>'1', 'two'=>'2', 'three'=>null );
echo array_key_exists('one', $arr)."\n"; // 1
echo array_key_exists('two', $arr)."\n"; // 1
echo array_key_exists('three', $arr)."\n"; // 1
echo isset($arr['one'])."\n"; // 1
echo isset($arr['two'])."\n"; // 1
echo isset($arr['three'])."\n"; // 是个空值
?>

1. 首先调用的参数不同.
 array_key_exists ( mixed $key , array $array ) : bool
 isset ( mixed $var [, mixed $... ] ) : bool

2. 意义不同.
 前者检查键值是否存在, 后者检查其值是否存在且不为0.

丁: === 与 !== 意义辨析
 

<?php
echo 0==false ? "等于\n":"不等于\n";    // 等于
echo 0===false ? "全等于\n":"不全等于\n"; //不全等
echo 1!='1' ? "不等于\n":"等于\n";    //等于
echo 1!=='1' ? "对\n":"错\n";        // 对
echo 1!==1 ? "对\n":"错\n";            // 错
?>

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值