PHP进阶教程
苍穹0113
奇虎360服务器端资深开发,曾担任中国体育直播TV网站开发组长,网信集团先锋支付架构师,负责系统分布式架构设计,项目框架的搭建以及数据库的优化,企业类库的搭建与维护以及制定技术解决方案。擅长Golang、PHP、面向对象设计模式、Redis、Mysql、微服务等
展开
-
数据结构
1. 数据结构提到算法不能不提数据结构,数据结构就是数据元素按照一种或多种关系的集合,按照逻辑结构划分,可以分为:1.1 集合集合是由一堆无序的、相关联的,且不重复的数据元素组成的集合。1.2 线性结构线性结构是数据元素之间存在“一对一”关系的线性关系的集合。1.3 树树是数据元素之间存在”一对多“关系的集合。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qk5EYuPI-1597892231495)(https://404.360try原创 2020-08-20 11:00:56 · 372 阅读 · 0 评论 -
db封装
db封装以下Connection类封装支持以下几个特性1.参数绑定防止sql注入2.读写分离3.多主多从,多节点负载均衡4.故障自动摘除及自动恢复代码实现<?phpclass Connection{ /** * @var array * @datetime 2020/7/5 10:20 AM * @author roach * @email jhq0113@163.com */ public $master原创 2020-08-19 10:25:32 · 952 阅读 · 0 评论 -
pdo-mysql
pdo-mysqlPHP连接数据库推荐使用PDO,PDO扩展为PHP访问数据库定义了一个轻量级接口。我们可以通过实现PDO接口的每个数据库驱动来访问数据库服务。访问mysql数据库服务,我们使用PDO_MYSQL驱动1.PDO实现CRUD在192.168.1.13:3306的mysql实例上创建数据库roach,创建roach用户并授权,在roach库中创建表t_user,sql如下CREATE TABLE `t_user` ( `id` int(10) unsigned NOT原创 2020-08-17 11:10:47 · 1220 阅读 · 0 评论 -
模板模式
模板模式模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。讲到模板模式,我不得不提的就是我们著名的PSR-3规范,PSR-3为我们提供了模板的接口<?phpnamespace Psr\Log;/** * Describes a logger instance. * * The me原创 2020-08-13 18:37:25 · 192 阅读 · 0 评论 -
观察者模式
观察者模式观察者模式又称发布订阅模式,我们常用的redis、rabbitmq和kafka等都支持发布订阅,那么这个模式是怎么回事儿呢?观察者模式主要有通知者和观察者等角色,观察者一般有多个。我们看下面代码示例<?php/** * Class Controller * @datetime 2020/7/17 6:46 PM * @author roach * @email jhq0113@163.com */class Controller{ /**原创 2020-08-10 10:28:40 · 397 阅读 · 0 评论 -
策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,即封装变化的算法。策略模式的本质是将算法封装起来。下面看一个常见的代码<?php/** * @param string $driver * @param string $msg * @datetime 2020/7/17 5:42 PM * @author roach * @email jhq0113@163.com */function log($dr.原创 2020-08-07 18:20:10 · 181 阅读 · 0 评论 -
简单工厂
简单工厂简单工厂让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。<?php/** * Class IPay * @datetime 2020/7/15 8:29 下午 * @author roach * @email jhq0113@163.com */abstract class IPay{ /**创建订单号 * @param int原创 2020-08-06 11:23:12 · 142 阅读 · 0 评论 -
单例
单例模式每一种设计模式都是为了解决特定的问题,单例模式从名字就可以看出,是软件系统中只需要一个对象时使用。如果一个类在系统中只能有一个实例,可以通过如下代码实现<?php/** * Class Singleton * @datetime 2020/7/12 10:08 PM * @author roach * @email jhq0113@163.com */class Singleton{ /** * @var Singleton * @da原创 2020-08-02 17:30:38 · 158 阅读 · 0 评论 -
设计模式
1.什么是模式设计模式是对某些典型易变问题的特定解决方案,这些问题和解决方案经过分类总结,并且为了方便交流给每个解决方案都起了特定的名字。模式是为了解决变化的问题,将变化的问题进行封装,让变化单独变化而互不影响,以达到项目系统的扩展性,模式是一种更高层次的代码复用。设想一下,假如我们的项目是一次性项目,一旦发布,以后再也不会修改,那么我们完全没有必要使用设计模式,反而使用了设计模式会增加系统的复杂度,但是一次性的项目在我们实际工作环境中是极少的,如果实际工作环境中都是一次项目,那个时候我们开原创 2020-08-01 09:55:56 · 357 阅读 · 2 评论 -
seaslog
seaslog是一个第三方提供的高性能日志扩展,是性能最好的PHP日志框架之一,其代码库地址https://github.com/SeasX/SeasLog1.安装下载安装包时注意版本兼容性,即seaslog版本与PHP版本的兼容性,在seaslog的release日志里会有PHP版本的支持说明。预编译与安装,安装方式和其他扩展一样,不清楚可以参考http://404.360tryst.com/views/7.html#layout./configure --with-php-co.原创 2020-07-31 18:36:24 · 583 阅读 · 0 评论 -
openssl
openssl是一个加解密相关的库,这个库在计算机领域得到了广泛的应用。1.操作系统中安装openssl安装openssl扩展之前,你的操作系统需要先安装openssl,centos操作系统安装方式yum install openssl openssl-devel执行一下命令,如果可以输出版本信息表示安装成功openssl version -a作者环境输出OpenSSL 1.0.2k-fips 26 Jan 2017built on: reproducible buil.原创 2020-07-30 16:53:39 · 1299 阅读 · 0 评论 -
bcmath
bcmath对于任意精度的数学,bcmath提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1在编译PHP时加上参数--enable-bcmath即可启用改扩展,也可以在编译安装完成后,通过phpize方式安装,源码目录位于PHP的源码目录中的ext目录。phpize安装方式可以参考http://404.360tryst.com/views/7.html#layout1.浮点型计算问题也许有人会说,PHP不是提供了数学运算的符号,比如说+,-,*原创 2020-07-29 17:59:12 · 740 阅读 · 0 评论 -
密码散列算法
密码散列算法是password扩展,他是PHP核心的一部分,不需要单独安装这个库是专门对密码做hash运算与校验的。大家都知道,用户注册设置的密码需要存储在数据库,很多老项目都是把密码就行md5运算然后存储到数据库表中,但是由于现在计算机硬件性能提升,md5算法已经不再安全,那么应该用什么算法呢?对密码进行hash运算并校验<?php//对密码进行hash运算,算法采用PASSWORD_BCRYPT$hash = password_hash('jhq2312.原创 2020-07-28 11:54:11 · 718 阅读 · 0 评论 -
hash扩展
hash扩展是PHP核心的一部分,使用hash扩展中的函数不需要安装扩展hash是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,PHP的hash扩展提供一些hash算法hash算法一般是非可逆的,常用作数据签名1.查看自己的PHP环境支持的hash算法<?php/** * Created by PhpStorm. * User: Jiang Haiqiang * Date: 2020/7/7 * Time: 10:53 PM */$algoLi.原创 2020-07-27 15:28:00 · 326 阅读 · 0 评论 -
php扩展
php扩展1.安装PHP生产环境PHP都是运行在Linux操作系统中,如:Centos操作系统,在Centos操作系统中安装PHP需要经过预编译、编译和安装等阶段。安装步骤如下:1.从PHP官方网站下载某个版本的PHP源码包,如:7.2.31PHP官网地址:https://www.php.net/2.创建php-fpm运行用户组与用户 # 创建www用户组 groupadd www #创建www用户,且www用户不能登录 useradd www -g w原创 2020-07-26 19:05:09 · 336 阅读 · 0 评论 -
composer
composercomposer是PHP依赖管理工具,composer集成了PSR-4规范的类自动加载,composer官网地址:https://www.phpcomposer.com/composer包托管在https://packagist.org/,当我们需要检索某项功能的依赖包时可以到这里自行检索,目前这里包含了很多著名的依赖框架和库,如:phpunit、guzzle、elasticsearch、phpoffice等。1.composer的安装下载前请确保您的电脑能够成功连接互联原创 2020-07-25 11:06:42 · 560 阅读 · 0 评论 -
异常与错误处理
异常与错误处理PHP的异常与错误是分开的,当程序出现异常时会throw一个\Exception(或子类)对象,但是当出现错误时会触发一个错误。1. 异常处理1.1 通过try...catch主动处理异常<?php/** * Class UserNotExistsException * @datetime 2020/7/2 5:11 下午 * @author roach * @email jhq0113@163.com */class UserNotExistsExc原创 2020-07-24 14:43:40 · 415 阅读 · 1 评论 -
反射
反射反射是一种动态获取类成员属性和成员方法,并且可以动态创建对象进行调用的一种技术。Java语言有一个特别著名的框架叫Spring,几乎任何Java程序员对这个框架非常熟悉,这个框架早期最核心的思想就是DI(依赖注入),底层的技术实现核心就是依赖反射技术。PHP本身其实不通过反射也能动态创建对象,通过new关键字就可以创建对象,如下例程:<?phpnamespace popo;class User{ /** * @var string * @da原创 2020-07-23 12:21:03 · 139 阅读 · 0 评论 -
自动加载
类自动加载在编写面向对象程序时,每个类新建一个PHP文件,这会带来一个烦恼:每个脚本的开头,都需要require一个长长的列表。这就需要一种自动加载机制。所谓类自动加载就是当我们想使用某个命名空间下的某个类时,直接use某个类,然后在使用这个类时自动按照某个规则将文件require,不用自己显示的require相应的代码文件。我们在使用一些开源框架时,一般都引入了类自动加载。在PHP早期版本中通过__autoload()函数完成自动加载,在PHP5以后,官方推荐使用spl_autoload_原创 2020-07-20 13:06:16 · 417 阅读 · 1 评论 -
面向对象
面向对象不管你是商城、直播或者其他任何类型的项目,都需要面向对象编程。面向对象来源于生活,同时解决的也是生活中的问题,面向对象模拟真实生活中解决问题的方式来解决问题,比如,当我们生病需要就医时,我们会到某个医院或者诊所去看医生,医生就是个类,某个科室的某××医生就是我们new出来的对象。生活中类似的例子还有很多,就不再一一列举。关于面向对象编程,是一个非常能够考察一个开发人员编码功底的技术点。刚走出校园的应届毕业生、做过2年左右的业务开发和具有5年以上底层框架开发经验的三个人对面向对象的理解是完全原创 2020-07-18 14:56:28 · 300 阅读 · 0 评论 -
编码规范
编码规范1. 代码清晰度无规矩不成方圆,编程也是有套路的,好的代码不仅要好的性能,还要有好的规范。如果代码没有按照一定的规范进行编写,那么代码的可维护性就会很差,相信任何人都不太愿意接手不规范的代码。代码的清晰度是一个衡量开发人员编码素质的重要标准。2. PSR规范每一个编程语言都有自己的编码规范,PHP也不例外,PHP语言公认的编码规范就是PSR规范,PSR规范官方网址https://www.php-fig.org/psr/。PSR 是PHP Standard Recommendat原创 2020-07-17 20:11:54 · 538 阅读 · 0 评论