PHP 继承与实现比较 final和const修饰符说明

 继承和实现接口的比较:

 (1)可以认为 实现接口是对单一继承的补充.
 (2)可以在不破坏类层级关系的前提下,对某个类功能扩展.
 final关键字
 1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑...), 可以使用final

//  final class A{

//  }

//此时,B类不能继承A类

//  class B extends A{

//  }
//  echo "ok";

 2.如果我们希望某个方法,比如计算个人所得税的方法,不能子类改写,(不希望该方法被子类中方法重载   )可以使用fianl 来修饰方法

<?php
class A{
    final public function getRate($salary){
        return $salary*0.08;
    }
}
class B extends A{
    //不能去覆盖父类的getRate方法.
    /*public function getRate($sal){
        return $sal*0.01;
    }*/
}
      
$b=new B();
echo $b->getRate(100)."<br/>";
?>


final关键字不能去修饰属性.

const 关键字 的讲解
//当你有一个属性,不希望被修改,则考虑使用const 做成常量
// 基本用法是
// class C{
//        //常量在定义的同时必须赋初值
//        const 常量名=赋初值;
// }
// interface 接口名{
//        //常量在定义时就要赋储值
//        const 常量名=赋初值;
// }
// 常量不能写修饰符,默认是public,但不能写出来
// 常量名一般全部用大写字母表示
// 使用 类名::常量名; 接口名::常量

<?php
       class Z{
              //常量在定义的时候,必须给初值.
              //const 关键字前面不要带修饰符号,但默认为public.
              const TAX_RATE=0.08;
              public function payTax($val){
                     //常量不能修改.
                     //Z::TAX_RATE=0.01;
                     //return $val*self::TAX_RATE; 【ok】
                     return $val*Z::TAX_RATE; //【ok】
              }
       }
       $a=new Z();
       echo $a->payTax(200);

?>


注意:

 1.常量在定义的时候需要赋初值
 2.常量不能修改.
 3.常量名不能有 $, 一般是大写, 默认是public
 4.常量在类的内部使用 self::常量的名称  或   类名::常量的名称  表示
    在类的外部使用   类名::常量的名称   表示.
 5.常量可以被子类继承
 6.常量是属于 类 的,不是属于某个对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值