php(8)面向对象

抽象类:在实际开发中有这个,有的父类不会实例化,把方法不需要写方法体。主要用途是让子类来继承,这样子可以达到代码复用,同时有利于项目设计者,设计类。抽象类不一定要包含abstract,也就是可以没有abstract方法。
      php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --- abstract class A{  }
      php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --- abstract public function cry();  //没有方法体,不能实现
      php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 ----如果一个类有一个抽象方法,则这个类必须申明为抽象类
      php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 ----如果一个类继承了抽象类,其本意就是为了继承抽象方法,所以要实现所有的继承了的抽象方法。

<?php
header(' content:text/html;charset="utf-8" ');
error_reporting(0);

abstract class Animal{ //抽象类
public $name = 'anikin';
abstract function cry(); //抽象方法,也可以没有抽象类方法;
public function getName(){ //可以实现的方法
return $this->name;
}
}
class pig extends Animal{
function cry(){
echo 'this is abstract function';
}
}
$pig1 = new pig();
$pig1->cry(); echo'<br/>';
echo $pig1->getName();
?>


接口interface 定义一些规范(没有实现的方法或者属性),供其他类实现
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --一般以小写i大头
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --class 类名 implements 接口1,接口2...{  }
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --更加抽象的抽象类,体现了多态和高内聚低耦合的设计思想
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --什么情况使用接口:多人协作写项目,定下规范供别人使用;或者多个平级的类之间有一些共同的方法
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 ---不能实例化一个接口,方法都不能有主体
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --一个类可以实现多个接口,但是要使用逗号隔开。
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --接口中是可以有属性的,但是必须是常量(全局),默认是public 【const A=90】; 可以接口名::类名访问
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --接口的方法是public的
     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --一个接口不能继承其他的类,但是可以继承其他的接口
      php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。
 

<?php
header('content:text/html; charset="UTF-8" ');
error_reporting(0);

interface iUsb1{
public function a();
}
interface iUsb2{
public function b();
}
interface iUsb extends iUsb1,iUsb2{
const A=12;
public function test();
}
class bbb implements iUsb{
public function a(){ };
public function b(){ };
public function test(){ };
}
echo iUsb::A;
?>


     php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 --当一个类区实现了某些接口,则必须把所有接口的方法都实现

<?php
header('content:text/html; charset="UTF-8" ');
error_reporting(0);
interface iUsb{
public function start(); //接口中的方法不能有方法体
public function stop();
const AA='90'; //定义属性必须是常量
}
class Camera implements iUsb{
public function start(){
echo '相机开始工作了';
}
public function stop(){
echo '相机停止了工作';
}
}
class Phone implements iUsb{
public function start(){
echo '手机开始工作了';
}
public function stop(){
echo '手机停止了工作';
}
}

//实例化相机
$c1 = new Camera();
$c1->start();
$c1->stop(); echo'<br/>';

//创建一个手机
$c2 = new Phone();
$c2->start();
$c2->stop();
echo iUsb::AA;
?>


php(8)面向对象 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。
 
--实现接口和继承类
    --实现接口可以看做是对继承的一种补充
    --实现接口可以在不打破继承关系的前提下,对某个功能扩展,非常灵活。

<?php
header('content:text/html; charset="UTF-8" ');
error_reporting(0);
//实现接口就是对单一继承的弥补
class monkey{
public $name;
public $age;
public function climbTree(){
echo '猴子会爬树';
}
}

interface iBird{
public function fly();
}
interface iFish{
public function swimming();
}

class Little extends monkey implements iBird,iFish{
public function fly(){
echo '猴子会飞翔';
}
public function swimming(){
echo '猴子会游泳';
}
}

$L1 = new Little();
$L1->climbTree();
$L1->fly();
$L1->swimming();
?>


--final 概念:一个类不希望被其他类继承
    --希望某个方法不被重写。

<?php
header(' content-type:text/html; charset="UTF-8" ');
error_reporting(0);
class A{
final public function getRate($s){
return $s*0.08;
}
}
class B extends A{
// 不能覆盖父类的方法
// public function getRate($s){
// return $s*0.01;
}
}
$b = new B();
echo $b->getRate(100);
?>


--const 常量名 = 初值;不能修改的值  大写
 class A{ const  常量名 = 初值 }                类名::常量名
 interface 接口名{  const  常量名 = 初值}  接口名:常量

<?php
header(' content-type:text/html; charset="UTF-8" ');
error_reporting(0);
class A{
const TAX_RARE = 0.08; //在定义的时候必须给初值,前面不能使用修饰符号修饰
public function payTax($s){
// A::TAX_RARE =0.01;
return $s*A::TAX_RARE; // $s*self::TAX_RARE; self也是可以的
}
}
$a=new A();
echo $a->payTax(200);
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值