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."\
".
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:

谢谢

观看

相关推荐
shinelord明7 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
小张认为的测试21 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
ELI_He9992 小时前
PHP中替换某个包或某个类
开发语言·php
大圣数据星球6 小时前
Fluss 写入数据湖实战
大数据·设计模式·flink
思忖小下7 小时前
梳理你的思路(从OOP到架构设计)_设计模式Template Method模式
设计模式·模板方法模式·eit
2401_857439699 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
Smile灬凉城66616 小时前
反序列化为啥可以利用加号绕过php正则匹配
开发语言·php
思忖小下17 小时前
梳理你的思路(从OOP到架构设计)_简介设计模式
设计模式·架构·eit
奥顺17 小时前
PHPUnit使用指南:编写高效的单元测试
大数据·mysql·开源·php
黑客Jack19 小时前
网络安全加密
安全·web安全·php