<?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();//跨命名空间的访问
运行实例 »
点击 "运行实例" 按钮查看在线实例
以上实例运行结果如下: