博客列表 >实例演示类的扩展,抽象,接口的语法与命名空间的特点及用法

实例演示类的扩展,抽象,接口的语法与命名空间的特点及用法

叫我孙大树
叫我孙大树原创
2022年08月16日 06:51:37293浏览
<?php
namespace global;
//实例演示类的扩展,抽象,接口的语法
class Normal{
    //标准类
    public $nor = '标准类的属性<br>';
    public function __construct(){
        echo '标准类的方法<br>';
    }
    public function getData(){
        echo $this->nor;
    }
}

class Extend extends Normal{
    public $ext = '继承类属性<br>';
    //标准类的继承类
    public function getData()//重写父类方法
    {
        echo $this->ext;
        parent::getData();//调用父类方法
    }
    public function newFunction(){
        //类扩展
        echo '我是继承类的新方法<br>';
    }
}

$a = new Extend();//实例化继承类
$a->getData();//继承类中重写的父类方法
$a->newFunction();//继承类新添加的方法
echo '<hr>';

//抽象类
abstract class Light{
     protected $name;
     protected int $maxLumin;
     public function __construct($lightName,$maxLumin){
         $this->name = $lightName;
         $this->maxLumin = $maxLumin;
     }
     abstract function switchOn();
}

class Philips extends Light{
    protected $color = ['red','yellow','white'];
    protected $status = false;
    public function switchOn()
    {
        $this->status?$this->status=false:$this->status=true;
        $chnStatus = $this->status?'开':'关';
        echo "我的品牌是飞利浦,我的名字是{$this->name},我的最大亮度是{$this->maxLumin}流明。当前状态是{$chnStatus}<br>";
    }
}

$n1 = new Philips('n1',1500);
$n1->switchOn();
$n1->switchOn();
$n1->switchOn();
$n1->switchOn();
$n1->switchOn();
echo '<hr>';

//接口
interface paymentInterface{
    function start();
    function pay();
}

class alipay implements paymentInterface{
    public function start()
    {
        echo '支付宝发起支付<br>';
    }
    public function pay()
    {
        echo '支付宝正在支付<br>';
    }
}
class wechatPay implements paymentInterface{
    public function start()
    {
        echo '微信发起支付<br>';
    }
    public function pay()
    {
        echo '微信支付正在支付<br>';
    }
}

class paymentService{
    protected $service;
    public function __construct(paymentInterface $service){
        //依赖反转
        $this->service = $service;
    }
    public function start(){
        $this->service->start();
    }
    public function pay(){
        $this->service->pay();
    }
}
$aliPay = new paymentService(new alipay());
$wechatPay = new paymentService(new wechatPay());
$aliPay->start();
$aliPay->pay();
$wechatPay->start();
$wechatPay->pay();
echo '<hr>';

//全局成员有哪些,他们有哪些特点?为什么要用命名空间, 描述命名空间的作用,以及声明方式, 跨空间成员的访问方式
/*
 * 全局成员包含php内置函数,它们可以在代码的任何地方调用。
 * 命名空间可以很好地解决代码重名问题,就像最简单的例子:同一个目录不允许同名文件存在,但是可以通过新建文件夹的方式来解决。
 */

//命名空间声明方式
namespace a;
function a(){
    return __NAMESPACE__.'命名空间里面的'.__FUNCTION__.'方法<br>';
}
echo a();
echo '跨命名空间的'.\b\a();

namespace b;
function a(){
    return __NAMESPACE__.'命名空间里面的'.__FUNCTION__.'方法<br>';
}
echo a();
echo '跨命名空间的'.\a\a();//跨命名空间的访问

运行实例 »

点击 "运行实例" 按钮查看在线实例

以上实例运行结果如下:

屏幕截图 2022-08-16 064955.jpg


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议