PHP设计模式之简单投诉页面实例,php设计模式实例
本文实例介绍了PHP简单投诉页面的实现代码,分享给大家供大家参考,具体内容如下
php代码:
<?php /* * 设计模式练习 * 1.数据库连接类(单例模式) * 2.调用接口实现留言本功能(工厂模式) * 3.实现分级举报处理功能(责任链模式) * 4.发送不同组合的举报信息(桥接模式) * 5.发送不同格式的举报信息(适配器模式) * 6.在投诉内容后自动追加时间(装饰器模式) * 7.根据会员登录信息变换显示风格(观察者模式) * 8.根据发帖长度加经验值(策略模式) */ interface DB { function conn(); } /** * 单例模式 */ class MysqlSingle implements DB { protected static $_instance = NULL; public static function getInstance() { if (!self::$_instance instanceof self) { self::$_instance = new self; } return self::$_instance; } final protected function __construct() { echo 'Mysql单例创建成功<br>'; } final protected function __clone() { return false; } public function conn() { echo 'Mysql连接成功<br>'; } } /** * 工厂模式 */ interface Factory { function createDB(); } class MysqlFactory implements Factory { public function createDB() { echo 'Mysql工厂创建成功<br>'; return MysqlSingle::getInstance(); } } /** * 根据用户名显示不同风格 * 观察者模式 */ class Observer implements SplSubject { protected $_observers = NULL; public $_style = NULL; public function __construct($style) { $this->_style = $style; $this->_observers = new SplObjectStorage(); } public function show() { $this->notify(); } public function attach(SplObserver $observer) { $this->_observers->attach($observer); } public function detach(SplObserver $observer) { $this->_observers->detach($observer); } public function notify() { $this->_observers->rewind(); while ($this->_observers->valid()) { $observer = $this->_observers->current(); $observer->update($this); $this->_observers->next(); } } } class StyleA implements SplObserver { public function update(SplSubject $subject) { echo $subject->_style . ' 模块A<br>'; } } class StyleB implements SplObserver { public function update(SplSubject $subject) { echo $subject->_style . ' 模块B<br>'; } } /** * 根据不同方式进行投诉 * 桥接模式 */ class Bridge { protected $_obj = NULL; public function __construct($obj) { $this->_obj = $obj; } public function msg($type) { } public function show() { $this->msg(); $this->_obj->msg(); } } class BridgeEmail extends Bridge { public function msg() { echo 'Email>>'; } } class BridgeSms extends Bridge { public function msg() { echo 'Sms>>'; } } class Normal { public function msg() { echo 'Normal<br>'; } } class Danger { public function msg() { echo 'Danger<br>'; } } /** * 适配器模式 */ class Serialize { public $content = NULL; public function __construct($content) { $this->content = serialize($content); } public function show() { return '序列化格式:<br>' . $this->content; } } class JsonAdapter extends Serialize { public function __construct($content) { parent::__construct($content); $tmp = unserialize($this->content); $this->content = json_encode($tmp, TRUE); } public function show() { return 'Json格式:<br>' . $this->content; } } /** * 在投诉内容后自动追加 * 装饰器模式 */ class Base { protected $_content = NULL; public function __construct($content) { $this->_content = $content; } public function getContent() { return $this->_content; } } class Decorator { private $_base = NULL; public function __construct(Base $base) { $this->_base = $base; } public function show() { return $this->_base->getContent() . '>>系统时间:' . date('Y-m-d H:i:s', time()); } } /** * 分级举报处理功能 * 责任链模式 */ class level1 { protected $_level = 1; protected $_top = 'Level2'; public function deal($level) { if ($level <= $this->_level) { echo '处理级别:1<br>'; return; } $top = new $this->_top; $top->deal($level); } } class level2 { protected $_level = 2; protected $_top = 'Level3'; public function deal($level) { if ($level <= $this->_level) { echo '处理级别:2<br>'; return; } $top = new $this->_top; $top->deal($level); } } class level3 { protected $_level = 3; protected $_top = 'Level2'; public function deal($level) { echo '处理级别:3<br>'; return; } } if (!empty($_POST)) { echo '<h1 id="PHP设计模式">PHP设计模式</h1>'; //连接数据库——工厂+单例模式 $mysqlFactory = new MysqlFactory(); $single = $mysqlFactory->createDB(); $single->conn(); echo '<br>'; //观察者模式 $username = $_POST['username']; $ob = new Observer($username); $a = new StyleA(); $ob->attach($a); $b = new StyleB(); $ob->attach($b); $ob->show(); echo '<br>'; $ob->detach($b); $ob->show(); echo '<br>'; //桥接模式 $typeM = $_POST['typeM']; $typeN = 'Bridge' . $_POST['typeN']; $obj = new $typeN(new $typeM); $obj->show(); echo '<br>'; //适配器模式 $post = $_POST; $obj = new Serialize($post); echo $obj->show(); echo '<br>'; $json = new JsonAdapter($post); echo $json->show(); echo '<br>'; echo '<br>'; //装饰器模式 $content = $_POST['content']; $decorator = new Decorator(new Base($content)); echo $decorator->show(); echo '<br>'; //责任链模式 echo '<br>'; $level = $_POST['level']; $deal = new Level1(); $deal->deal(intval($level)); return; } require("0.html");
html代码:
<!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools | Templates and open the template in the editor. --> <html> <head> <title>PHP设计模式</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> div{border:solid gray 1px;margin-top:10px;height: 100px;width: 200px;} </style> </head> <body> <form action="0.php" method="post"> <h1 id="用户名">用户名</h1> <select id="username" name="username"> <option value="Tom">Tom</option> <option value="Lily">Lily</option> </select> <h1 id="投诉方式">投诉方式</h1> <select id="type" name="typeM"> <option value="Normal">Normal</option> <option value="Danger">Danger</option> </select> <select id="type" name="typeN"> <option value="Email">Email</option> <option value="Sms">Sms</option> </select> <h1 id="处理级别">处理级别</h1> <select id="level" name="level"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <h1 id="投诉内容">投诉内容</h1> <textarea id="content" name="content" rows="3"></textarea> <button type="submit">提交</button> </form> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章:
- php设计模式之简单工厂模式详解
- PHP中“简单工厂模式”实例代码讲解
- PHP设计模式之观察者模式实例
- php设计模式之委托模式
- PHP常用设计模式之委托设计模式
- PHP 设计模式系列之 specification规格模式
- 学习php设计模式 php实现备忘录模式(Memento)
- 学习php设计模式 php实现观察者模式(Observer)
- 学习php设计模式 php实现模板方法模式
- 实例讲解PHP设计模式编程中的简单工厂模式

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.