
php
快乐程序员_666
爱编程!爱生活!
展开
-
设计模式——策略模式
在简单工厂模式里有一些瑕疵,虽然PHP不需要重新编译但小张之后每次新加一个支付方式都要告知负责人去修改PayFactory。实例化对象的逻辑全部封装在一个工厂类里,每次需求变化都要单独修改工厂类(违反了开闭原则),而且出了异常可能所有相关功能类都正常工作。我们可以用工厂模式来解决简单工厂,首先申明设计模式不是算法,它只有适合与不适合,没有性能优劣之分。我们今天还可用策略模式来解决。策略模式:是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。以下是具体实现步骤:此时负责人制原创 2021-10-28 15:37:36 · 174 阅读 · 0 评论 -
php二分查找法
二分查找又称折半查找,二分查找算法要求数据必须是有序的$array = [1,6,8,9,13,18,19,29,36,38,50,51,56,58,59,60,62,66,68,70,71,73,75,76,77,79,89];function bin_search($array, $low, $high, $search){ if ($low<$high) { $middle = intval(($low+$high)/2); if ($arr.原创 2021-10-27 16:17:27 · 375 阅读 · 0 评论 -
排序-php自定义二维数组排序
原有数组,根据键a的大小对数组$arr进行排序$arr = [ ['a'=>19, 'b'=>10], ['a'=>12, 'b'=>12], ['a'=>13, 'b'=>13], ['a'=>21, 'b'=>21], ['a'=>6, 'b'=>6], ['a'=>7, 'b'=>7],];开发思路:1、获取所有指定列的值,且保持原有key;2、对获取的指定列的值进行排序,且保持原有k原创 2021-10-27 15:04:34 · 530 阅读 · 0 评论 -
排序-PHP快速排序
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:(1)从数列中挑出一个元素,称该元素为“基准”。(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。function kuaisu ($arr){ if(count($arr) <= 1){ return $arr; } $init原创 2021-10-27 11:33:13 · 294 阅读 · 0 评论 -
排序-php冒泡排序
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。function maopao ($arr){ for($i =0 ; $i<count($arr); $i++) { for ($j=0; $j<count($arr)-1-$i; $j++) {原创 2021-10-27 10:39:14 · 176 阅读 · 0 评论 -
设计模式——观察者
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。我们在用美团App时经常出现用户登录时会弹出一个框告诉用户获得了一张优惠券,金额和使用规则会根据用户距离上次的登录时间和消费习惯来定。当我们经常使用时获得优惠券的概率就会少,优惠金额也会少。软件设计里把登录做为一个被观察的类(主题),把送优惠券做为一个观察类。当用户登录时通知送优惠券,为用增加一个优惠券。可以多个观察者,比如用户登录后会根据其消费习原创 2021-01-07 19:22:03 · 253 阅读 · 0 评论 -
设计模式——单例模式
单例模式:作为对象的创建模式,它提供了一种创建对象的最佳方式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。主要应用场合:线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。例如下面代码:class UserModel{ public function __construct原创 2021-01-05 00:17:45 · 226 阅读 · 0 评论 -
设计模式——抽象工厂
之前我们说过简单工厂模式和工厂模式。都是针对单一支付类来写。但在开发过程我们常会做一个促销活动,而且有些促销是针对支付方式的。比如公司和招商银行签订了战略合作,招商银行会给我们引流,公司给用招商银行支付的用户赠送礼品、优惠券或直接打折。这样就会用两个维度:支付方式和促销。那这又如何处理呢?现在我们通过这个例子来讲解抽象工厂模式:首先、需要一个支付抽象类Payment,在这个基础上可以扩展支付宝支付、微信支付、招商银行支付等。其次、需要一个促销类型的抽象类Promotion, 在这个基础上可以扩展原创 2020-12-31 01:12:45 · 477 阅读 · 1 评论 -
设计模式——简单工厂
设计模式之简单工厂设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。就像下象棋时红方走中心炮,黑方就跳一个马来保护中兵一样。所以不要认为他有多深奥。之后会用一样简单的例子来一一讲解常见的几种设计模式。今天主要分析简单工厂模式。比如要实现一个在线支付功能(主要是支付宝支付和微信支付),如果之后还会有paypal、京东等。因为每种线上支付都自己的文档,对接起来会花费一定的时间,由于时间紧所以一人负责一个支付方式开发。小张开发支付宝,小李开发微信。小王开发结算逻辑原创 2020-12-28 00:12:09 · 238 阅读 · 0 评论 -
php中的多态
面向对象中的三大特性是:封装、继承、多态。相对于封装和继承,多态要相对复杂一样。继承和多态是来自于生物学,简单的说儿女会继承父母的一些特性称为继承,但儿女在同一个方面有不同于父母的地方,这就是我们说的多态。比如:一般健康的人都会跑步,这是人类继承下来的本能,但每个人跑步的速度不一样。今天我们用一个支付的小例子来说一下多态:第一、在国内线上支付一般是用支付宝和微信。为了统一规范先定义一个抽象的支付类做为基类,里面一个去支付的功能。abstract class Pay{ abstract原创 2020-12-25 16:29:23 · 1065 阅读 · 1 评论 -
PHP实现RSA加密,解密,加签,验签
公钥用于对数据进行加密,私钥用于对数据进行解密;私钥用于对数据进行签名,公钥用于对签名进行验证。封装的RSA代码如下:class Rsa{ /** * private key */ private $_privKey; /** * public key */ private $_pubKey; /** ...原创 2019-11-17 15:25:14 · 1030 阅读 · 0 评论 -
php使用rabbitmq
信道、交换器和路由键、队列概念参考:https://www.cnblogs.com/zhangxue/p/7699698.html交换机和交换机类型交换机是用来发送消息的AMQP实体。交换机拿到一个消息之后将它路由给一个或零个队列。它使用哪种路由算法是由交换机类型和被称作绑定(bindings)的规则所决定的。AMQP 0-9-1的代理提供了四种交换机先上代码...原创 2019-10-17 20:54:40 · 417 阅读 · 0 评论 -
PHP安装rabbitmq扩展
我在项目中应用rabbitmq已很多年了,自己从没总结过。在用的时候感觉之前的东西又忘,然后又去百度里各种找资料,找资料这种折腾的事太累。现在想把这个过程写下来,以备不时之需,人老了记忆力在下降。写技术文章总喜欢乱串,先说说PHP安装rabbitmq扩展(可理解为是调用rabbitmq的php客户端,非rabbitmq服务端),然后是rabbitmq的应用场景,具体应用下篇文章再写。一、...原创 2019-09-27 11:44:18 · 5486 阅读 · 1 评论 -
linux安装php 出现Sorry, I cannot run apxs
tar -zxvfphp-5.6.40.tar.gzcdphp-5.6.40.tar.gz./configure --prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--with-apxs2=/usr/local/httpd/bin/apxs \--with-mysql=mysqlnd ...原创 2019-08-30 14:33:26 · 1482 阅读 · 1 评论