分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

PHP面向对象设计模式和设计原则

发布时间:2023-09-06 01:35责任编辑:蔡小小关键词:PHP面向对象

一、设计模式

  1.单例模式

    目的:让一个类只能生成一个对象

    步骤:    ①将构造函数变成私有的 

        ②在类里面做一个静态成员函数造对象

        ③在方法里加限制条件

 ???//单例模式 ???class Ren{ ???????????????//定义人类 ???????public static $r; ???//设定静态成员变量,为了可以带入静态成员函数中 ???????public $name; ???????//普通成员变量,用于测试是否只实例化了一个对象 ???????private function __construct(){ ???????//私有化构造函数,阻止实例化对象 ???????????????????????} ???????public static function duixiang(){ ???//创建一个静态成员函数,用于访问构造函数以实例化对象 ???????????if(empty(self::$r)){ ???????????//设定限制条件 ???????????????self::$r = new Ren(); ???????????} ???????????return self::$r; ???????????????//返回$r中的唯一的实例化对象 ???????} ???} ???????$r = Ren::duixiang(); ???//访问静态函数实例化对象 ???$r->name = "张三"; ???????//给对象的$name赋值"张三" ???$r1 = Ren::duixiang(); ???//测试是否只有一个对象 ???var_dump($r1);

    只有一个对象

    

  

  工厂模式

    目的:做一个专门造对象的工厂

      如果一个父类的子类量比较庞大,子类名命名方式不一致,可以用这种模式以代号方式造对象

 ???//工厂模式 ???class Jisuan{ ???????//定义一个计算父类 ???????public $a; ???????//两个普通成员变量 ???????public $b; ???????????????public function Js(){ ???//定义一个计算的普通成员函数 ???????????echo"计算结果为"; ???????????} ???????public function __construct($a,$b){ ???//构造函数,用于实例化对象时设定初始的$a和$b的值 ???????????$this->a = $a; ???????????$this->b = $b; ???????????} ???????} ???class Jia extends Jisuan{ ???//子类加法 ???????public function Js(){ ???//子类重写的计算函数 ???????????parent::Js(); ???????????return($this->a+$this->b); ???????????} ???????} ???class Jian extends Jisuan{ ???//子类减法 ???????public function Js(){ ???//子类重写的计算函数 ???????????????parent::Js(); ???????????return($this->a-$this->b); ???????????} ???????} ???class Cheng extends Jisuan{ ???//子类乘法 ???????public function Js(){ ???//子类重写的计算函数 ???????????parent::Js(); ???????????return($this->a*$this->b); ???????????} ???????} ???class Chu extends Jisuan{ ???//子类除法 ???????public function Js(){ ???//子类重写的计算函数 ???????????parent::Js(); ???????????return($this->a/$this->b); ???????????} ???????} ???class Quyu extends Jisuan{ ???//子类取余 ???????public function Js(){ ???//子类重写的计算函数 ???????????parent::Js(); ???????????return($this->a%$this->b); ???????????} ???????} ???????class GongChang{ ???????//定义一个工厂类,用于生产实例化对象 ???????public static function duixiang($a,$b,$ysf){ ???//设置静态成员函数并传入参数,以运算符号代替子类的名称 ???????????switch($ysf){ ???????//分支较多,用switch case 语句设计不同运算符号所对应不同的子类并实例化对象 ???????????????case "+"; ???????????????????return new Jia($a,$b); ???????????????????break; ???????????????????????????????case "-"; ???????????????????return new Jian($a,$b); ???????????????????break; ???????????????????????????????case "*"; ???????????????????return new Cheng($a,$b); ???????????????????break; ???????????????????????????????case "/"; ???????????????????return new Chu($a,$b); ???????????????????break; ???????????????????????????????case "%"; ???????????????????return new Quyu($a,$b); ???????????????????break; ???????????????} ???????} ???????} ???$j = GongChang::duixiang(3,2,"%"); ???//测试 ???echo $j->Js(); ???//输出

   输出结果   

二、设计六大原则

  1.开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。

  2.里氏代还原则,子类必须能够替换基类,否则不应当设计为其子类。

  3.依赖倒换原则,设计要依赖于抽象而不是具体化,换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。

  4.接口隔离原则,将大的接口打散成多个小接口

  5.单一职责:一个类的功能尽量单一,降低耦合

  6.迪米特法则(最少知识原则),一个对象应当对其他对象有尽可能少的了解,不和陌生人说话

PHP面向对象设计模式和设计原则

原文地址:https://www.cnblogs.com/zxbs12345/p/8267447.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved