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.mzph.cn/news/723479.shtml

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

相关文章

AFL havoc_stage

AFL fuzz_one函数&#xff0c;有个地方判断skip_deterministic &#xff0c;而AFLNet的例子里面&#xff0c;定义了-d参数&#xff0c;也就是skip_deterministic1&#xff0c;直接进入到havoc_stage&#xff0c;所以这里想分析下havoc_stage。 if (skip_deterministic || queue…

Ollama内网离线部署大模型

为了演示方便&#xff0c;我这里选用参数较小的Qwen1.5-0.5B-Chat模型。 下载GGUF模型 访问huggingface下载qwen1_5-0_5b-chat-q5_k_m.gguf模型。 https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat-GGUF/tree/main注意&#xff1a; huggingface访问不到&#xff0c;可以选择…

华为智慧教室3.0的晨光,点亮教育智能化变革

“教室外有更大的世界&#xff0c;但世界上没有比教室更伟大的地方。” 我们在求学阶段&#xff0c;都听说过这句话&#xff0c;但往往是在走出校园之后&#xff0c;才真正理解了这句话。为了让走出校园的孩子能够有能力&#xff0c;有勇气探索广阔的世界。我们应该准备最好的教…

@德人合科技|公司数据防泄漏软件,防止内部文件数据资料外泄!

现如今&#xff0c;企业都普遍面临数据安全问题的挑战&#xff0c;随着数据泄漏事件不断增加&#xff0c;企业需要强有力的数据防泄漏系统来保护机密信息。 www.drhchina.com 德人合科技 | 公司数据防泄漏软件&#xff0c;防止内部文件数据资料外泄&#xff01; 公司数据防泄漏…

openGauss环境搭建 | 新手指南

一、搭建准备 openGauss开发需要使用linux环境&#xff0c;先下载远程连接工具Xshell/MobaXterm 。 1. 使用工具连接远程linux服务器&#xff0c;使用root账号远程登录&#xff0c;创建个人账号。 useradd -d /home/xxx -m xxx 2. 设置密码。 passwd xxx 3. 切换到个人账…

【中国电信】光猫 PT632 使用超管权限修改 IP 地址租期时间

背景 由于光猫默认设置的动态 IP 租期是 24 小时&#xff0c;所以每天都会断网一次&#xff0c;严重影响用网体验&#xff0c;所以打算通过修改动态 IP 租期为 一周&#xff08;最长就一周&#xff0c;没有永久的选项&#xff09;来改善。 需求 一台电脑&#xff08;已开启 …

Qt 二维数组的访问与应用

配色方案有多种类型&#xff0c;可以根据不同的需求和应用场景来选择合适的配色方法。在柱状图、饼状图中都会用到不同的配色&#xff0c;本文将配色方案使用二维数组进行存储&#xff0c;对常用的配色进行了整理&#xff1a; 效果图 示例代码 void MainWindow::InitUI() {QS…

java 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法&#xff0c;通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息&#xff0c;将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件&#xff1a; 应用二分查找算法&#xff1a…

Android中的传感器类型和接口名称

本文将介绍传感器坐标轴、基础传感器和复合传感器&#xff08;动作传感器、姿势传感器、未校准传感器和互动传感器&#xff09;。 1. 传感器坐标轴 许多传感器的传感器事件值在相对于设备静止的特定坐标系中表示。 1.1 移动设备坐标轴 Sensor API 仅与屏幕的自然方向相关&a…

【每日一题】1976. 到达目的地的方案数-2024.3.5

题目: 1976. 到达目的地的方案数 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整数数组 roads ,其中 roads[i] = […

JavaScript的for循环与双重for循环,妈妈再也不用担心我找工作了

学习路线 第一阶段&#xff1a;网页制作 HTML&#xff1a;常用标签&#xff0c;锚点&#xff0c;列表标签&#xff0c;表单标签&#xff0c;表格标签&#xff0c;标签分类&#xff0c;标签语义化&#xff0c;注释&#xff0c;字符实体 CSS&#xff1a;CSS介绍&#xff0c;全局…

解决MySQL 5.7在Redhat 9中启动报错:libncurses.so.5和libtinfo.so.5缺失问题

在使用Linux系统搭建MySQL数据库的过程中&#xff0c;我们往往会遇到各种依赖库的问题&#xff0c;尤其是在安装较旧版本的MySQL时。最近&#xff0c;在RedHat 9&#xff08;rocky linux 9&#xff09;系统上安装MySQL 5.7版本时&#xff0c;我遇到了一个典型的依赖库缺失错误&…

无法枚举容器内对象 访问被拒绝

一、什么是“无法枚举容器中的对象。访问被拒绝”错误&#xff1f; 在Windows设备当中&#xff0c;对文件或文件夹的权限进行设置可以有效地保护隐私内容。因此&#xff0c;管理员账户可以对权限进行更改&#xff0c;并且有权决定是否将内容共享给多个用户使用。但是在某些情况…

如何使用Python操作MySQL的各种功能?高级用法?

当今互联网时代&#xff0c;数据处理已经成为了一个非常重要的任务。而MySQL作为一款开源的关系型数据库&#xff0c;被广泛应用于各种场景。本篇博客将介绍如何使用Python操作MySQL的各种功能&#xff0c;以及一些高级用法。 连接MySQL 在Python中&#xff0c;我们可以使用p…

在Vue中搭建Three.js环境(超详细、保姆级),创建场景、相机、渲染器《一》

目录 Three.js简介创建vue项目引入Three.js实际操作环节文件目录创建初始化场景、相机 Three.js简介 Three.js 是一款基于 WebGL的 JavaScript 3D 库&#xff0c;它封装了 WebGL API&#xff0c;为开发者提供了简单易用的 API 来在 Web 浏览器中展示 3D 图形。Three.js 提供了…

CUDA学习笔记04:向量之和

参考资料 CUDA编程模型系列二(向量操作)_哔哩哔哩_bilibili &#xff08;非常好的学习资料&#xff01;&#xff09; vs2019 随意新建一个空项目&#xff0c;按照之前的环境配置配好项目依赖&#xff1a; CUDA学习笔记02&#xff1a;测试程序hello world-CSDN博客 代码结构…

《 前端挑战与未来:如何看待“前端已死”》

在技术领域&#xff0c;时常会有一些激进的言论引发热议&#xff0c;比如近年来不少人声称“前端已死”。这样的言论引发了广泛的讨论和反思。本文将从几个方向探讨这个话题&#xff1a;为什么会出现“前端已死”的言论、如何看待这种说法、前端技术的未来发展趋势以及前端人如…

MS8911S/8921S/8922M/8931S——4ns 延时、轨到轨高速比较器

产品简述 MS8911S/MS8921S/MS8922M/MS8931S 是一款具 有内部迟滞的高速比较器。其电源电压范围为 3.0V- 5.5V &#xff0c;输入和输出范围均可做到轨到轨。其输出为推 挽结构&#xff0c;兼容 CMOS/TTL 逻辑电平标准。传输延时为 4ns &#xff0c;且失调电压低。单一比…

在虚拟机vm下的Linux系统下 安装redis 超详细

打开Linux后 右键打开终端 1.输入:su root 登录root 密码是123456 2.然后输入:yum -y install gcc-c 安装gcc基础依赖包 3.yum -y install centos-release-scl 4.yum -y install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutils //为了编译最新版本的Redis源码 用…

二维码门楼牌管理系统应用场景:城市规划与土地管理的新利器

文章目录 前言一、城市规划部门的新助手二、门牌数据的深度应用三、支持可持续城市发展四、与城市规划部门的联动 前言 随着科技的不断进步&#xff0c;二维码技术已经深入到我们生活的方方面面。在城市规划与土地管理领域&#xff0c;二维码门楼牌管理系统正成为一项革命性的…