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:

谢谢

观看

相关推荐
JaguarJack30 分钟前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo33 分钟前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack16 小时前
为什么 PHP 闭包要加 static?
后端·php·服务端
willow1 天前
Axios由浅入深
设计模式·axios
ServBay2 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954482 天前
CTF 伪协议
php
七月丶3 天前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞3 天前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼3 天前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式