PHP设计模式初探 以前写的完整PPT!!!!!

幻灯片 1:

初探PHP设计模式

copyright          CSDN  白毛大侠

幻灯片 2:

我们说别人代码写的烂,烂在哪?

反思我们平时是怎么写代码的?

非开发者如何转开发(业务) ?


一.过程与对象

幻灯片 3:


<?php
echo “开火”;
echo “煎鱼”;
echo “烧水”
echo “水滚,放鱼”
echo “起锅”

echo “开火”;
echo “煎鱼”;
echo “放调料”
echo “再煎”
echo “起锅”


内容1
面向过程的代码

幻灯片 4:

1

3

2


代码无法重用
代码属于堆砌状态
会被接手的人诅咒
问题

幻灯片 5:

<?php
function zhuyu(){
 echo “开火”;
echo “煎鱼”;
echo “烧水”
echo “水滚,放鱼”
echo “起锅”} 
function jianyu(){
 echo “开火”;
echo “煎鱼”;
echo “放调料”
echo “再煎”
echo “起锅”}
zhuyu();
jianyu();


内容1
面向结构化的代码

幻灯片 6:
1

3

2


代码可重用
方便调用
结构清晰
优点

1

3

2
文件做为结构化编程的一个集合单元,那么,文件的数量会越来越多
勉强的解决方案:
目录做为更大的集合
问题
自己都不记得哪里被调用过
 Function不易找到
不知是否声明过、写过类似功能的function 
function命名易重名,


新代码的修改会破坏原有代码,存在新的bug隐患。


幻灯片 7:

面向对象:考虑维护期的设计方式

我才是主角
觉悟吧!!

幻灯片 8:
<?php
    Class Student { 
        public $name;
        public $age;
        protected $grade;

       //constract

        public function showInfo() {
            echo $this -> name.":".$this -> age;
        }
        
        public function xuehao() {
            echo "<br/>学号:".($this->age + 10);
        }
    }

    $stu1 = new Student();
    $stu1 -> name = "zhangsan";
    $stu1 -> age = "24";
    $stu1 -> showInfo();
    $stu1 -> xuehao();
?>

幻灯片 9:

PHP面向对象三大特征封装、多态、继承

幻灯片 10:
封装
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。

通俗来说:
封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面。在使用时直接实例化该类的某一个方法,获得需要的数据

如果是私有的方法和属性值,外部无法访问,具有一定的保护作用。

幻灯片 11:
继承
所谓继承,就是一个子类通过extends 父类 把父类的一些(public / protected)属性和(public / protected)方法继承下来。不能继承私有的

幻灯片 12:
<?php
   //简单的继承例子 
    //父类
    Class Student {
        public $name;
        protected $age;
        protected $grade;

        /*function __construct() {
             echo 1234;
             $this->name = 5555;
        }*/

        public function showInfo() {
            echo $this -> name."<br/>".$this -> age;
        }
    }

    /**
    * 小学生
    */
    class Pupil extends Student
    {
        /*function __construct() {
            parent::__construct();
            var_dump($this->name);
             echo 'xiaoxuesheng';
             $this->name = 'xiaoxuesheng';
        }*/
        
        public function test() {
            echo "<br/>小学生在考试。。。";
        }
    }

    /**
    * 大学生
    */
    class Graduate extends Student
    {
        public function test() {
            echo "<br/>大学生在考试。。。";
        } 
    }

    $stu1 = new Pupil();
    $stu1 -> name = "lizzy";
    $stu1 -> test();
    $stu1 -> showInfo();

    $stu2 = new Graduate();
    $stu2 -> name = "zxm";
    $stu2 -> test();
    $stu2 -> showInfo();
?>

幻灯片 13:
<?php
   //(1)protected属性和方法受保护,在子类不能直接调用,要在子类中定义方法访问。  
   Class ParentClass {
    public $name = 'lizzy';
    protected $age = 24;
    private $sex = "女";

    public function test1() {
        echo "<br/>展示public方法";
    }

    protected function test2() {
        echo "<br/>展示protected方法";
    }

    private function test3() {
        echo "<br/>展示private方法";
    }
}

Class SubClass extends ParentClass {
    function show() {
        echo "age=".$this->age;
        // echo "sex=".$this->sex;//是不能继承下来的
        $this -> test2();
        // $this -> test3(); //间接访问都不行
    }
}

$sub1 = new SubClass();
$name=$sub1 -> name;
var_dump($name);


$sub1 -> show(); //show直接访问,test2可以间接访问

$sub1 -> test1();//可以直接访问 
$name=$sub1 -> test2;//不能直接访问
$name=$sub1 -> test3;//不能直接访问


幻灯片 14:
(1)protected属性和方法受保护,在子类不能直接调用,要在子类中定义方法访问。

(2)如果希望子类调用父类的构造方法,或者其他方法(public / protected),可以使用类名::方法名; 或者parent::方法名;

(3)当一个子类的方法和父类方法(protected/public)完全一致时,我们称之为方法的覆盖(重写)。


幻灯片 15:
多态

一个类,被多个子类继承,如果这个类的某个方法,在多个子类中,表现出不同的功能,我们称这种行为为多态。
(同一个类的不同子类表现出的不同行态)

多态的实现必须要满足三个条件:一是子类继承父类,二是子类重写父类的方法,三是父类引用指向子类对象

幻灯片 16:
<?php 
 //当一个父类知道所有的子类都有一个方法
 //但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法。
 Class Animal {
   function cry() { 
    echo “发声叫"; 
    } 
  } //重写 
 
 Class Dog extends Animal { 
    function cry() { echo "小狗汪汪叫"; } 
} //重写
 
Class Pig extends Animal {
    function cry() { echo "小猪哼哼叫"; } 

$dog = new Dog(); 
$dog -> cry(); 
echo "<br>";
$pig = new Pig(); 
$pig -> cry(); 
?> 

幻灯片 17:

设计模式不是拳打脚踢
它是一套降龙十八掌

幻灯片 18:

幻灯片 19:

幻灯片 20:

Singleton(单例模式):单例模式是最常见的模式之一,在Web应用的开发中,常常用于允许在运行时为某个特定的类创建仅有一个可访问的实例。
Factory(工厂模式):工厂模式是另一种非常常用的模式,正如其名字所示:确实是对象实例的生产工厂。某些意义上,工厂模式提供了通用的方法有助于我们去获取对象,而不需要关心其具体的内在的实现。


单例模式

工厂模式

幻灯片 21:


<?php
class Single {
    private $name;//声明一个私有的实例变量
    private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
    }
    static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
        static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
        if(!self::$instance) self::$instance = new self();
            return self::$instance;
    }
    public function setname($n){
        $this->name = $n; 
    }
    public function getname(){
        return $this->name; 
    }
}
$oa = Single::getinstance();
var_dump($oa);
$oa->setname('hellow');
$ob = Single::getinstance();

echo $oa->getname();//hellow
echo $ob->getname();//hellow

单例模式

幻灯片 22:


工厂模式

幻灯片 23:


工厂模式

幻灯片 24:


<?php

class CommsManager {
    const BLOGGS = 1;
    const MEGA = 2;
    private $mode = 1;

    public function __construct( $mode )
    {
        $this->mode = $mode;
    }  

    function getApptEncoder()
    {
        switch($this->mode) {
            case (self::MEGA):
                return new MegaApptEncoder();
            default:
                return new BloggsApptEncoder();
        }    
    }
}
$comms = new CommsManager(CommsManager::MEGA);
$appEncoder = $comms->getApptEncoder();
Print $apptEncoder->encode();
工厂模式

幻灯片 25:

框架是有灵魂的,看你是否能心意相通

幻灯片 26:


工厂模式

幻灯片 27:
谢谢
观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中json类型的字段

有些很复杂的信息&#xff0c;我们一般会用扩展字段传一个json串&#xff0c;字段一般用text类型存在数据库。mysql5.7以后支持json类型的字段&#xff0c;还可以进行sql查询与修改json内的某个字段的能力。 1.json字段定义 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…

ABAP - SALV教程09 颜色( 行、列、单元格 )

SALV只有设置列颜色的处理的方法但是SALV的行颜色和列颜色可以通过输出内表控制,具体实现可以参考&#xff1a;http://t.csdnimg.cn/OiBOXSALV设置列颜色&#xff1a;获取全体列对象的引用调用方法set_color()就能实现 METHODS:set_colors CHANGING co_alv TYPE REF TO cl_…

UCSF DOCK 分子对接详细案例(03)-分子从头设计de novo Design

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、 软件及操作环境二、研究目的三、结构文件准备四、 DOCK中 de novo design4.1 generic de novo design4.2 Rescoring the Outputs对输出重新评分 五、 De Novo Refinement准备配体运行Refineme…

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言&#xff0c;与Java是完全兼容&#xff0c;除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;也可以被编译成Java字节码文件。 以下是Groovy的一些…

C# aes加密解密byte数组

using System.Security.Cryptography; using System.Text;namespace AESStu01;public class AesHelper {// AES加密密钥和向量&#xff08;需要保密&#xff09; private static readonly string Key "";//16长度字符串数字混合private static readonly string IV …

Unity曲柄滑块四杆机构运动计算

一、运动效果 二、机构的介绍 曲柄长度&#xff1a;a&#xff0c;线段AB长度 连杆长度&#xff1a;b&#xff0c;线段BC长度 偏心距离&#xff1a;e&#xff0c;滑块轨迹与曲柄中心点A的垂直距离 三、已知点A点B和e的值&#xff0c;计算C点的位置 1、计算s的值 var h math.…

殿堂级Flink源码极精课程预售

一、为什么我们要读源码? 1、让个人技术快速成长: 优秀的开源框架,底层的源码设计思想也非常优秀,同时还有含有大量的设计模式和并发编程技术&#xff0c;优秀的解决方案,熟读源码对猿们技术提升有很大帮助 2、新技术学习能力: Java开源码框架的源码熟读后&#xff0c;若出现…

2024最新算法:鹦鹉优化算法(Parrot optimizer,PO)求解23个基准函数(提供MATLAB代码)

一、鹦鹉优化算法 鹦鹉优化算法&#xff08;Parrot optimizer&#xff0c;PO&#xff09;由Junbo Lian等人于2024年提出的一种高效的元启发式算法&#xff0c;该算法从驯养的鹦鹉中观察到的觅食、停留、交流和对陌生人行为的恐惧中汲取灵感。这些行为被封装在四个不同的公式中…

学习和工作的投入产出比(节选)

人工智能统领全文 推荐包含关于投入、产出、过剩、市场关注、案例、结果和避雷等主题的信息&#xff1a; 投入与产出&#xff1a; 投入和产出都有直接和间接两类常见形式。常见的四种组合是&#xff1a;直接投入、直接产出、间接投入、间接产出。 过剩&#xff1a; 过剩是一个重…

BUUCTF---[极客大挑战 2019]LoveSQL1

1.题目描述 2.一般遇到登录&#xff0c;用户名会尝试admin&#xff0c;密码会尝试万能密码" or 11#或者 or 11#。这里尝试了第一种&#xff0c;但是不对。 3.接着尝试第二种 or 11#。提示登录成功了说明这里是单引号注入&#xff0c;并给了一串字符 4.sql注入题一般会设计…

13-微服务初探-自研微服务框架

微服务初探 1. 架构变迁之路 1.1 单体架构 互联网早期&#xff0c;一般的网站应用流量较小&#xff0c;只需要一个应用&#xff0c;将所有的功能代码都部署在一起就可以&#xff0c;这样可以减少开发&#xff0c;部署和维护的成本。 比如说一个电商系统&#xff0c;里面包含…

Ubuntu18.04安装RTX2060显卡驱动+CUDA+cuDNN

Ubuntu18.04安装RTX2060显卡驱动CUDAcuDNN 1 安装RTX2060显卡驱动1.1 查看当前显卡是否被识别1.2 安装驱动依赖1.3 安装桌面显示管理器1.4 下载显卡驱动1.5 禁用nouveau1.6 安装驱动1.7 查看驱动安装情况 2 安装CUDA2.1 查看当前显卡支持的CUDA版本2.2 下载CUDA Toolkit2.3 安装…