PHP对象其他

Final

PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承,否则会产生致命错误。属性不能被定义为 final,只有类和方法才能被定义为 final。

<?php
/*class A{
    
    public final function test(){
        
    }
}
class B extends A{
    public function test(){
        
    }
}*/

/*final class A{
    
    public final function test(){
        
    }
}
class B extends A{

}*/
?>

对象和引用

PHP中引用是别名,就是两个不同的变量名字指向相同的内容。PHP5中,一个对象变量不再保存整个对象的值,而是保存一个标识符来访问真正的对象内容,当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。PHP中通过&来进行引用传递。

<?php
class A{
}
class B{
    
}
$a=new A();
$a2=$a;
$a3=&$a;
$a=new B();
var_dump($a===$a2);//传递标识符的拷贝,改变a的标识符不影响a2。
var_dump($a===$a3);//a3是a的引用,改变a的标识符影响a3。
?>

类型约束

PHP5起可以使用类型约束,函数的参数可以指定必须为对象(对象所属类的名字)、接口数组(PHP5.1+)或者callable(PHP5.4+)。但是如果使用NULL作为参数的默认值,在调用函数的时候依然可以使用NULL做为实参。如果一个类或接口指定了类型约束,则其所有的子类或实现也都如此。类型约束不能用于标量类型(如int或string)也不能用于trait。 

<?php
interface A{
    public function foo();
}

class B implements A{
     public function foo(){
         echo "foo in B\n";
     }
}
function test(B $obj=null){
    if($obj!=null){
        $obj->foo(); 
    }
}
function test2(A $obj){
    $obj->foo();
}
function test3(array $arr){
    foreach ($arr as $value) {
        echo "$value\t";
    }
    echo "\n";
}
function test4(callable $call,$data){
    call_user_func($call, $data);
}
$b=new B();
test($b);
test2($b);
test3(range('a','e'));
test4('test3',range('a','e'));
test4('test2',$b);
test(null);
?>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值