php
文章平均质量分 65
php基础,php高级,php框架,php设计模式,php调用第三方,php使用中间件
一介白衣ing
。。。
展开
-
怎么从0到1实现一个PHP框架?
本人开发的框架在2021年年初开发完成,后面没有再做过任何维护和修改。是仅供大家参考交流的学习项目,请勿使用在生产环境,也勿用作商业用途。原创 2023-09-02 19:01:48 · 995 阅读 · 2 评论 -
❥(^_-) Yii2框架源码解析之属性、行为和事件component.php
前言 今天这篇博客主要讲Yii2框架中的组件类component.php。这个组件类囊括了今天要讲的主题:属性、行为和事件。首先在这里解释一下什么是属性,什么事行为,什么是事件。属性 属性就是指类的成员变量,Yii2框架中的组件类component.php继承了对象基础类BaseObject.php。在对象基础类里面,运用php中的魔术方法__get()和__set(),实现对类属性的赋值和获取。行为行为和php的trait有点类似。使用行...原创 2021-09-09 14:40:32 · 379 阅读 · 2 评论 -
❥(^_-) Yii2框架源码解析之请求和响应
应用入口首先,yii框架的应用的整个运行过程有一个生命周期,生命周期的状态是从0到6,代表从应用的开始到结束。中间不同的生命周期,会使用框架中的事件机制触发不同的生命周期方法(这里只讲整个请求和响应的流程,具体涉及到的事件后面的博文再讲)。这里把生命周期列出来,大家有个印象。const STATE_BEGIN = 0;const STATE_INIT = 1;const STATE_BEFORE_REQUEST = 2;const STATE_HANDLING_REQUEST = 3;原创 2021-09-07 17:15:28 · 362 阅读 · 0 评论 -
❥(^_-) Yii2框架源码解析之错误和异常处理
前言所有的框架的错误处理机制,都在整个框架运行的顺序中排在前列,一般错误处理机制排在常量定义、配置加载、类的自动加载之后,排在其他流程逻辑之前。base\Application错误处理的入口是应用类的基类base\Application的构造方法中实现 public function __construct($config = []) { // 当application基类被继承之后,Yii::$app就变成了继承子类。 Yi原创 2021-09-07 16:24:03 · 508 阅读 · 0 评论 -
❥(^_-) Yii2框架源码解析之定位器ServiceLocator.php
前言所有的框架的错误处理机制,都在整个框架运行的顺序中排在前列,一般错误处理机制排在常量定义、配置加载、类的自动加载之后,排在其他流程逻辑之前。$this和new static()整个框架中,很多地方会用到$this。$this如果存在类的方法中,表示当前类。但是如果存在子类继承的情况下,则他会永远返回最终调用的子类(不管$this出现在父类或者子类),举个栗子:class A extends B { public function test() { ret原创 2021-09-07 10:11:37 · 173 阅读 · 0 评论 -
❥(^_-) Yii2框架源码解析之容器类Container.php
容器概述网上总有些人把php框架中的容器说的很高大上。php中的容器其实很简单。首先,php中的容器是为了解决类和类之间的依赖关系的。举个栗子:存在三个类:class Group{ public static $a = 0; function __construct($a) { static::$a = $a; }}class User{ public function __construct(Group $group)原创 2021-09-06 19:25:54 · 463 阅读 · 0 评论 -
❥(^_-) Yii2框架源码解析之全局辅助类Yii.php
源码分析我们在入口文件里面,已经看到引入了Yii.php,那么在这里我们把源码贴出来:<?phprequire __DIR__ . '/BaseYii.php';class Yii extends \yii\BaseYii{}//Yii全局辅助类,没啥可说的。//注册自动加载,为Yii里面的autoload方法。(当然,autoload方法存在于Yii的基类:\yii\BaseYii)spl_autoload_register(['Yii', 'autoload'],原创 2021-09-06 18:42:03 · 348 阅读 · 0 评论 -
php项目本地部署如何保护源代码
因为公司业务需求,需要在合作方的服务器上部署项目,又要保护项目的源码不被泄露。提出解决方案原创 2020-03-22 20:26:13 · 2144 阅读 · 0 评论 -
php中token的生成和解析(使用JWT)
什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。为什么使用JWT传统的基于session的认证,在随着不同客户端用户的增加,独立的服务原创 2021-02-06 11:16:24 · 3899 阅读 · 4 评论 -
linux下安装redis以及安装php-redis扩展
一、安装redis第一步:官网上找到redis对应的版本下载地址,复制下载。wget http://download.redis.io/releases/redis-5.0.3.tar.gz第二步:解压、重命名tar xzf redis-5.0.3.tar.gzmv redis-5.0.3 redis第三步:安装make && make install...原创 2020-03-14 15:37:52 · 186 阅读 · 0 评论 -
[Workerman]二、Workerman的简单实例
官方手册:http://doc.workerman.net/getting-started/simple-example.html1. http协议连接<?phpuse Workerman\Worker;require_once __DIR__ . '/Workerman/Autoloader.php';// 创建一个Worker监听2345端口,使用http协议通讯$http_worker = new Worker("http://0.0.0.0:2345");// 启动4个进程对原创 2020-06-12 09:49:27 · 304 阅读 · 0 评论 -
[Workerman]一、Workerman的简单介绍
官方文档:http://doc.workerman.net官方网站:https://www.workerman.netWorkerman是什么?Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。Workerman能做什么?1、即时通讯类 例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送2、物联网类 例如Workerman与打印机通讯、与单片机通讯、智能手环、智能家居、共享单车等等。3、游戏服务器类 例如棋牌游戏、MMORPG游戏等原创 2020-05-26 19:38:03 · 563 阅读 · 0 评论 -
[Workerman]三、Workerman主动推送消息到客户端
场景:数据通过http接口,发送到服务端,我们需要在http的接口,将发送过来的数据实时发送给客户端。实现先下载一个PHPSocket.IO测试代码下载:https://www.workerman.net/download新建一个run.php<?phpuse Workerman\Worker;use Workerman\Timer;use PHPSocketIO\SocketIO;use Workerman\Protocols\Http\Request;use Worker原创 2020-07-03 16:06:20 · 2559 阅读 · 3 评论 -
PHP微信小程序登录获取sessionKey
话不多说,直接上代码!!! function sessionKey($code, $appId, $appSecret) { /** * code 换取 session_key * 这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。 * 其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。原创 2020-05-29 14:15:27 · 1384 阅读 · 0 评论 -
php 工商银行开放平台聚合支付(微信公众号,支付宝生活号)对接避坑指南
前言因为好多银行的支付SDK实例都是java的比较多,所以银行的支付用PHP比较难做,尤其是工商银行的支付更加是步步是坑。头一次对接工商银行,弄了好久,终于成功。这篇博客只是我做工行的聚合支付时,遇到的一些问题以及解决方法。商户接入聚合支付前准备工作1、熟悉支付的操作流程,详细阅读相关的文档。2、准备相关的参数,工行聚合支付主要有两个接口,一个是支付接口,另一个是异步商户通知接口。...原创 2019-03-18 19:25:10 · 9367 阅读 · 7 评论 -
PHP微信公众号、微信小程序获取微信用户信息和微信openid
前言没有前言准备工作微信服务号一个审核通过的网页域名一个登录公众号获取appid,secret,设置ip白名单(只获取openid不需要设置)开发实例public function request_wechat1(){ // 获取当前模块控制器和方法,便于session失效的时候重新获取,请求微信服务器出现白屏问题 /*$module = $r...原创 2019-03-19 14:37:43 · 1896 阅读 · 0 评论 -
PHP对接微信支付(小程序)
话不多说,直接上代码!!!<?php/** * 微信支付 * Class WxPay * @package app\common\library\wechat */class WxPay{ private $config; // 微信支付配置 /** * 构造方法 * WxPay constructor. * @param $config */ public function __construct($config)原创 2020-05-29 14:30:55 · 633 阅读 · 0 评论 -
thinkPHP5 关联查询的使用:hasOne/hasMany/belongsTo/belongsToMany
数据库中需要用到join连接查询时候,用thinkPHP框架的关联查询,可以有效的提高查询效率。(具体查询性能怎么样,咱也没试过,小伙伴们可以建两张数据量比较大的表,然后自己测试一下)thinkPHP5手册:https://www.kancloud.cn/manual/thinkphp5/135196hasOne: 一对一关联这个没啥好解释的。数据之间的关联一对一。比如:一个用户表,一个最近登录表。我们设计之初,每个用户登录表只存储该用户最近一次的登录信息。我们在SUser的模型中这样写两个方法:原创 2020-05-25 20:39:43 · 5577 阅读 · 1 评论 -
thinkPHP5中分表的使用以及内置方法的分析
前言首先,我们要知道什么是分表?以及我们为什么要分表?以及分表有哪些方式?我们根据不同的业务场景应该怎样去分表?在thinkPHP5框架里面我们又该怎么操作。分表的意义大家都知道mysql数据库是小型数据库,每张表最大承受的数据量大约是1亿条,而每张表超过300万条数据,单张表的查询速率会受到影响。(这个数值更具每张表的数据结构和数据值不同而变化。这里只是一个估值)这个时候我们解决的办法之一就是:分表。那么分表,通常又分为横向分表(水平分表),和纵向分表(垂直分表)。从字面上的意思理解的话,横向分原创 2020-06-09 14:57:29 · 4229 阅读 · 0 评论 -
thinkPHP框架里面的cli模式运行php接口
首先打开cmd输入项目web根目录(public 目录)运行:php index.php /module/controller/action注:要提前配置好php的环境变量哦!原创 2020-06-11 09:46:18 · 496 阅读 · 3 评论 -
[PHP设计模式]一、几种基本的设计模式
一、工厂模式工厂方法或者类生成对象,而不是在代码中直接new优点:生成的对象如果需要变化,只需要在类里面进行修改。避免多个地方生成对象,都需要对生成对象的参数修改。核心代码:<?phpnamespace TTclass Factory{ function createDataBase() { $db = new Database; return $db; }}啥意思我也懒得解释。二、单例模式使一个类只能实例化一次。优点:避免多次实例化造成对资源的浪费。核心代原创 2020-09-27 21:44:17 · 169 阅读 · 0 评论 -
[PHP设计模式]二、适配器模式
适配器模式,可以将截然不同的函数接口封装成统一的API实际应用:将三种不同的数据库操作接口封装成统一的接口。示例代码:首先先建立一个标准的api:Database.php<?phpnamespace TTinterface IDatabase{ function connect($host, $user, $passwd, $dbname); function query($sql); function close();} 2.MySQL数据库操作类:MySQL.php原创 2020-09-28 09:56:25 · 110 阅读 · 0 评论 -
[PHP设计模式]三、策略模式
策略模式,就是将一组特定的行为和算法封装成类,以适应某些特定的上下文环境。实际应用:电商网站根据性别展示不同的类目和广告示例代码:定义一个标准的接口<?phpnamespace TT;interface UserStrategy(){ function showAd(); function showCategary();}策略一:女性用户<?phpnamespace TT;class FemaleUserStrategy implements UserS原创 2020-09-28 10:17:47 · 157 阅读 · 0 评论 -
[PHP设计模式]四、数据对象映射模式
将数据和对象存储起来,对一个对象的操作会映射为对数据存储的操作实际应用:数据表user,对数据的操作。核心代码user数据表类文件<?phpnamespace TT;class User{ public $id; public $name; public $phone; protected $db; function __construct($id) { $this->db = new \TT\Database\MySQLi(); $this-&g原创 2020-09-28 10:43:15 · 96 阅读 · 0 评论 -
[PHP设计模式]五、观察者模式
观察者模式1:观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。2:场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。3:观察者模式实现了低耦合,非侵入式的通知与更新机制。<?phpclass Event extends \TT\EventGenerator;{ function tri原创 2020-09-28 11:42:44 · 181 阅读 · 0 评论 -
[PHP设计模式]六、原型模式
原型模式与工厂模式作用类似,都是用来创建对象与工厂模式的实现不同,原型模式是先创建一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作原型模式适用于大对象的创建。创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可示例代码:$prototype = new TT\Canvas();$prototype->init();$canvas1 = clone $prototype;$canvas1->rect(3原创 2020-09-28 16:25:51 · 93 阅读 · 0 评论 -
[PHP设计模式]七、装饰器模式
装饰器模式装饰器模式,可以动态地添加修改类的功能一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。示例代码:声明一个装饰器的接口<?phpnamespace TT;interface DrawDecorator{ function beforeDraw(); function afterDraw();}2.画布<?php原创 2020-09-28 17:23:56 · 119 阅读 · 0 评论 -
[PHP设计模式]八、迭代器模式
迭代器模式迭代器模式,在不需要了解内部实现的情况下,遍历一个聚合对象的内部元素。相对于传统的编程模式,迭代器模式可以隐藏遍历元素所需要的操作。示例代码:<?phpnamespace TT;class AllUser implements \Iterator{ protected $ids; protected $index; protected $data = []; function __construct { $db = Factory::getDatabase(原创 2020-09-28 19:06:57 · 181 阅读 · 0 评论 -
[PHP设计模式]九、代理模式
代理模式在客户端与实体之间建立一个代理对象,客户端对实体进行操作全部委派给代理对象,隐藏实体的具体实现细节。代理对象害可以与业务代码分离,部署到另外的服务器。业务代码中通过RPC来委派任务。...原创 2020-09-28 19:18:45 · 212 阅读 · 0 评论 -
[PHP设计模式]十、综合
面向对象编程的基本原则单一职责:一个类,只需要做好一件事情。开放封闭:一个类,应该是可扩展的,而不可修改的。原创 2020-09-29 09:46:15 · 141 阅读 · 0 评论 -
[PHP设计模式]十一、实战——自动加载配置
实现代码:原创 2020-09-29 10:21:10 · 147 阅读 · 0 评论 -
[PHP设计模式]十二、实战——从配置中生成数据库连接
示例代码:在这里插入代码片原创 2020-09-29 10:23:14 · 139 阅读 · 0 评论 -
[PHP设计模式]十三、实战——装饰器模式在MVC模式中的使用
示例代码:在这里插入代码片原创 2020-09-29 10:26:00 · 204 阅读 · 0 评论 -
[PHP设计模式]十四、实战——观察者模式在MVC模式中的使用
示例代码:在这里插入代码片原创 2020-09-29 10:26:51 · 299 阅读 · 0 评论 -
[PHP设计模式]十五、实战——代理模式在MVC模式中的使用
示例代码:在这里插入代码片原创 2020-09-29 10:27:47 · 167 阅读 · 0 评论 -
[rabbitMQ]一、rabbitMQ的简单介绍
官网地址:https://www.rabbitmq.com/关于消息队列(MQ)推荐博客地址:https://blog.csdn.net/fygu18/article/details/80863596消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ应用场景一:应用解耦:1.订单系统和库存系统的解耦。下单后原创 2020-05-18 11:53:37 · 148 阅读 · 0 评论 -
[rabbitMQ]二、rabbitMQ的安装和配置
官网地址:https://www.rabbitmq.com/windows安装1.安装Erlang:下载:http://www.erlang.org/download/otp_win64_22.2.exe(http://www.erlang.org/download/otp_win64_22.2.exe)没啥好说的,直接安装。2.安装rabbitmq:下载:https://www.rabbitmq.com/install-windows.html(https://www.rabbitmq.com原创 2020-05-18 15:08:16 · 189 阅读 · 0 评论 -
[rabbitMQ]三、rabbitMQ的php扩展的安装
官网地址:https://www.rabbitmq.com/安装扩展的前提是你已经安装了rabbitmq,安装步骤:https://blog.csdn.net/qq_39545346/article/details/106191397windows安装1.下载扩展:http://pecl.php.net/package/amqp/选择稳定的、合适的版本,点击下载。注意:X64 只支持属 64位 CPU 与 系统,而 X86 可以同时支持两种CPU,只是在 X64 CPU上会有性能损失。所以千万原创 2020-05-19 13:39:22 · 183 阅读 · 0 评论 -
[rabbitMQ]四、rabbitMQ队列之简单模式(simple)
我们来简单模拟一下,阻塞模式的生产者发布消息和消费者接收消息并处理。生产者(publish.php):1.创建连接:$config = array( 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'guest', 'password' => '123456', 'vhost'=>'/');$e_name = 'exchange1'; //交换机名$q_name = '原创 2020-05-19 16:21:32 · 329 阅读 · 0 评论 -
[rabbitMQ]五、rabbitMQ队列之工作模式(work 模式)
中文手册:https://xiaoxiami.gitbook.io/rabbitmq_into_chinese_php官网地址:https://www.rabbitmq.com/其他书籍:上京东、淘宝、当当、多抓鱼上看看。原创 2020-05-19 20:00:01 · 325 阅读 · 0 评论