PHP
文章平均质量分 72
PHP 基础、核心、设计模式
郎涯技术
微信搜一搜:【郎涯技术】关注我。
卖码为生,有代码洁癖。不爱广度,爱深度 — 专注分享Java / 在线教育 / 视音频领域等技术。
想和你一起,每天进步一点点,做一个不凡的人!
展开
-
PHP设计模式系列 - 策略模式
策略模式:策略模式设计帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法。 使用场景:例如有一个CD类,我们类存储了CD的信息。原先的时候,我们在CD类中直接调用getCD方法给出XML的结果随着业务扩展,需求方提出需要JSON数据格式输出这个时候我们引进了策略模式,可以让使用方根据需求自由选择是输出XML还是JSON代码实转载 2016-12-09 14:52:56 · 382 阅读 · 0 评论 -
PHP设计模式系列 - 单例
单例模式通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次。 使用场景例如数据库实例,一般都会走单例模式。单例模式可以减少类的实例化代码:来源InitPHP框架,先检测类有没被实例化,实例化了就使用已经存放在静态变量中的对象实例,没有则实例化并将对象保存起来。[php] view plain copy转载 2016-12-09 14:50:45 · 401 阅读 · 0 评论 -
PHP设计模式系列 - 观察者模式
观察者模式观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。场景设计设计一个订单类订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。原始的方法,是将这些操作都写在create函数里面转载 2016-12-09 14:47:29 · 499 阅读 · 0 评论 -
PHP设计模式系列 - 中介者模式
中介者模式中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中不是特别常用的设计模式。 设计场景:我们有一个CD类和一个MP3类,两个类的结构相似。我们需要在CD类更新的时候,同步更新MP3类。传统的做法就是在CD类中实转载 2016-12-09 14:42:07 · 656 阅读 · 0 评论 -
PHP设计模式系列 - 迭代器
PHP迭代器:可帮助构造特定的对象,那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据。(不是特别常用,在PHP中)使用场景:1.访问一个聚合对象的内容而无需暴露它的内部表示。2.支持对聚合对象的多种遍历。3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。PHP代码实现:[php] view plain转载 2016-12-09 14:39:19 · 398 阅读 · 0 评论 -
PHP设计模式系列 - 解释器模式
解释器模式解释器模式 用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作。解释器模式非常常用,比如PHP的模板引擎 就是非常常见的一种解释器模。代码:[php] view plain copy print?//解释器模式 用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作 //解释转载 2016-12-09 14:36:39 · 523 阅读 · 0 评论 -
PHP设计模式系列 - 工厂模式
工厂模式提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤。工厂模式 实际上就是建立一个统一的类实例化的函数接口。统一调用,统一控制。工厂模式是PHP项目开发中,最常用的设计模式,一般会配合单例模式一起使用,来加载php类库中的类。应用场景我们拥有一个Json类,String类,Xml类。如果我们不使用工厂方式实例化这些类转载 2016-12-09 14:34:49 · 393 阅读 · 0 评论 -
PHP设计模式系列 - 外观模式
外观模式通过在必需的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了调用对象的复杂性。外观设计模式和建造者模式非常相似,建造者模式一般是简化对象的调用的复杂性,外观模式一般是简化含有很多逻辑步骤和方法调用的复杂性。应用场景设计一个User类,里面有getUser获取用户信息接口在使用getUser这个接口的时候,需要设置用户的用户名和用户年龄所以在正转载 2016-12-09 14:30:15 · 435 阅读 · 0 评论 -
PHP设计模式系列 - 委托模式
委托模式通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。应用场景设计了一个cd类,类中有mp3播放模式,和mp4播放模式改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。代码:cd类,未改进之前,选择播放模式是转载 2016-12-09 14:26:01 · 512 阅读 · 0 评论 -
PHP设计模式系列 - 装饰器
什么是装饰器装饰器模式,对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设应用场景设计一个UserInfo类,里面有UserInfo数组,用于存储用户名信息通过addUser来添加用户名getUserList方法将打印出用户名信息现在需要将添加的用户信息变成大写的,我们需要不改变原先的类,并且不改变原先的数据结构我们设计了一个User转载 2016-12-09 14:23:18 · 504 阅读 · 0 评论 -
PHP设计模式系列 - 数据访问对象模式
数据访问对象模式数据访问对象模式描述了如何创建透明访问数据源的对象。场景设计设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法在实际使用的过程中,继承BaseDao,就可以直接调用基类的数据库操作方法代码:BaseDao 数据库操作基类[php] view plain copy转载 2016-12-09 14:20:53 · 368 阅读 · 0 评论 -
PHP设计模式系列 - 建造者模式
什么是建造者模式建造者模式主要是为了消除其它对象复杂的创建过程。设计场景有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,金钱等信息,才能获得用户具体的信息结果。 创建一个UserInfoBuilder 用户建造者类,这个类,将UserInfo复杂的创建姓名,年龄,金钱等操作封装起来,简化用户类的创建过程代码:UserInfo类,创建UserInfo类是复杂的,...转载 2016-12-09 14:16:20 · 458 阅读 · 0 评论 -
PHP设计模式系列 - 适配器
什么是适配器:适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口。设计情景:假如我们原始的有一个UserInfo的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUserName获取用户名的方法。 我们的MyOldObject类中,将从UserInfo这个类中获取用户信息,并且输出用户名 随着时间的推移,我们旧的UserInfo这个类只提供的获取用户名的方法...转载 2016-12-09 14:03:54 · 413 阅读 · 0 评论 -
如何有效提高 ThinkPHP 的应用性能
说到应用性能,涉及到的方方面面实在是太多了,关于服务器优化和前端优化的文章网上很多,所以就不再累述了。本文仅抛砖引玉浅述下ThinkPHP 5.1 应用开发中(尤其是部署环境)可能涉及的一些性能优化手段和注意事项。首先要强调一点:框架并不是应用性能的瓶颈,架构设计、数据库和人才是。框架在设计之初,出于通用性考虑,不会特意针对某个应用做深入优化,但提供了一些可能的手段和配置参数让你进行针对性的调...转载 2019-03-28 16:03:31 · 1145 阅读 · 0 评论 -
PHP8 新特性
PHP 8.0 是 PHP 语言的一个主版本更新。它包含了很多新功能与优化项, 包括 JIT、命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、,并改进了类型系统、错误处理、语法一致性。即时编译PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。关于 JIT 对 PHP 8 性能的贡献命名参数 RFCPHP 7htmlspecia转载 2021-01-08 18:13:02 · 2078 阅读 · 0 评论 -
Linux-CentOS PHP 获取内存/CPU/负载/网络带宽数据包/磁盘IO读写等监控指标
基于Linux CentOS系统获取内存、CPU、负载、网络带宽、网络数据包率、磁盘空间、磁盘IO、磁盘读写等指标不说原理,直接上代码1、代码<?php/** * 系统监控数据 */class SystemMonitor{ /** * 服务器运行时间 * * @return string */ public function GetUpTime() { if (false === ($str = file_原创 2021-01-07 18:06:42 · 1221 阅读 · 0 评论 -
soar-php SQL语句优化与重写的自动化工具
小米公司开源的 SOAR(SQL Optimizer And Rewriter) 是一个对 SQL 进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。1、功能特点跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)目前只支持 MySQL 语法族协议的 SQL 优化支持基于启发式算法的语句优化支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)支持 EXPLAIN 信息丰富解读支持 S原创 2020-11-20 15:43:35 · 621 阅读 · 0 评论 -
PHP 可以利用的危险的函数
1. 前言本文主要对 PHP 中的 disable_functions 以及一些可能会遭到利用的函数做一个罗列,并简单解释。2. 比较全的 disable_functionssystem,shell_exec,passthru,exec,popen,proc_open,pcntl_exec,mail,putenv,apache_setenv,mb_send_mail,assert,dl,se...转载 2019-03-29 19:26:37 · 1268 阅读 · 0 评论 -
PHP7 性能优化与新特性
PHP是一种在全球范围内被广泛使用的Web开发语言,PHP7 的革新也当然会给这些Web服务带来更深刻的变化。这里引用鸟哥PPT中的一个图表(82%的Web站点有使用PHP作为开发语言): (注:一个web站点可以会使用多种语言作为它的开发语言)PHP7重写了zend_vm,性能相比于PHP5.6提升了2-3倍,在某些方面相比于早年的HHVM还要优秀。 PHP7 的新增特性很多,不过,我们转载 2017-10-25 11:24:14 · 964 阅读 · 0 评论 -
PHP 性能优化简述
1. 语言级别多用内置函数、变量、常量,避免重复造轮子少用PHP魔术方法少用错误抑制符 @利用unset及时释放不使用的大内存(unset会出现注销不掉的情况)少用正则表达式(回溯开销大)使用带单引号的字符串作为键值,避免将没有引号的键值当作常量(#define),产生查找开销避免循环内做重复运算减少计算密集型业务(使用c等语言)2. 环境因素Linux 运行环境磁盘 减少文原创 2017-10-24 18:25:08 · 499 阅读 · 0 评论 -
PHP 防SQL注入和XSS攻击
就是通过把SQL命令、JS脚本等插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,等价于select * from users where usernam...原创 2016-11-21 22:51:43 · 3709 阅读 · 0 评论 -
PHP List数据集/数组转换成树状结构Tree
一、引用链接法 /** * 数据列表转换成树 * * @param array $dataArr 数据列表 * @param integer $rootId 根节点ID * @param string $pkName 主键 * @param string $pIdName 父节点名称 ...原创 2018-11-08 16:44:27 · 3016 阅读 · 1 评论 -
PHP 返回结果给前端/ajax后,在后台继续执行代码的方法
1. 问题背景在实际项目开发中,遇到一个问题:前端通过 Ajax 请求后台 PHP API 接口,执行多文件的打包下载操作,该请求由于需要更新大量的数据(日志、统计等信息)到数据库且还需要执行较大的磁盘IO操作,导致该请求很耗时间。由于前端页面的更新需要快速响应,因此需要 PHP 快速返回计算结果,然后后台继续执行余下的操作。2. 解决方法exit() 之后还能继续执行代码的方法有 析构...原创 2018-09-19 15:02:41 · 7981 阅读 · 0 评论 -
PHP 单点登录SSO实现方式详解
SSO( Single Sign On ),即单点登录,是一种控制多个相关但彼此独立的系统的访问权限, 拥有这一权限的用户可以使用单一的ID和密码访问某个或多个系统从而避免使用不同的用户名或密码,或者通过某种配置无缝地登录每个系统 。对于大型系统来说使用单点登录可以减少用户很多的麻烦。就拿百度来说吧,百度下面有很多的子系统——百度经验、百度知道、百度文库等等,如果我们使用这些系统的时候,每一个...原创 2018-03-21 11:55:26 · 9726 阅读 · 0 评论 -
PHP 安装包依赖关系管理工具Composer
对于现代语言而言,包管理器基本上是标配。Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm。好在我们有Composer,PHP依赖管理的利器。它是开源的,使用起来也很简单,提交自己的包也很容易。作为一个用户,你所要做的就是在composer.json文件中声明当前项目所依赖的开发包,然后运行phpcomposer.phar ins...转载 2016-02-23 22:35:44 · 2844 阅读 · 0 评论 -
PHP Yaconf 一个高性能的配置管理扩展(PHP7)
Yaconf 是一个高性能的配置管理扩展,是由PHP核心开发者鸟哥惠新宸发布的 PHP7 下的扩展应用。主要目标是简化读取项目配置文件, 使配置文件和项目代码分离,增强了配置文件的可读性和可维护性。据 Yaconf 开发者惠新宸在其博客上说,这个项目是其在来微博以后, 第一个优化项目中顺手做的一个小工具, 本身叫做Weibo_Conf. 但是因为 Weibo_Conf 是属于 Weibo 扩展...原创 2018-03-21 16:29:00 · 1606 阅读 · 0 评论 -
PHP Taint 一个用来检测 XSS/SQL/Shell 注入漏洞的扩展
什么是Taint ? An extension used for detecting XSS codes(tainted string), And also can be used to spot sql injection vulnerabilities, shell inject, etc.经过我实际测试, 能检测出实际的一些开源产品的(别问是什么)隐藏的 XSS code, SQL 注入...转载 2018-03-21 13:49:31 · 1237 阅读 · 0 评论 -
PHP socket服务器框架Workerman (GatewayWorker)
(1)建立在 TCP 协议之上,服务器端的实现比较容易。(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。(3)数据格式比较轻量,性能开销小,通信高效。(4)可以发送文本,也可以发送二进制数据。(5)没有同源限制,客户端可以与任意服务器通信。(6)协议标识符是ws(如...原创 2017-04-19 20:04:20 · 7033 阅读 · 0 评论 -
PHP 加密、解密工具Zend Guard和ionCube
当前市场上较流行的对PHP进行上述加密授权的软件主要有二种:(1)Zend公司的ZendGuard Zend Guard不仅可以实现对PHP应用的脚本进行加密保护和对PHP应用的产品进行商业许可证管理,还可以为许多软件生产商、IT服务提供商提供完善的加密和安全的产品发布系统。(2)ionCube公司的ionCube PHP Encode ionC原创 2016-11-30 09:12:19 · 11829 阅读 · 2 评论 -
PHP扩展 opcache 操作码优化加速组件的配置
Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具。现在,Zend 科技公司将 Optimizer+ 在 PHP License 下开源成为 Zend Opcache。 Zend OPcache 通过 opcode 缓存和优化提供更快的 PHP 执行过程。它将预编译的脚本文件存储在共享内存中供以后使用,原创 2016-11-18 17:20:18 · 2104 阅读 · 0 评论 -
PHP Smarty模版基础知识
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。...原创 2016-06-21 17:59:19 · 5055 阅读 · 0 评论 -
PHP Memcache函数详解
memcache函数所有的方法列表如下:Memcache::add – 添加一个值,如果已经存在,则返回falseMemcache::addServer – 添加一个可供使用的服务器地址Memcache::close – 关闭一个Memcache对象Memcache::connect – 创建一个Memcache对象memcache_debug – 控制调试转载 2016-05-19 14:00:02 · 762 阅读 · 0 评论 -
优秀的PHP开源项目集合
包管理Package ManagementLibraries for package and dependency management.Composer/Packagist – A package and dependency manager.Composer Installers – A multi framework Composer library instal转载 2016-02-23 21:24:20 · 133817 阅读 · 1 评论 -
PHP Twig模版的function详解(中文)
目前twig内建的函数包括 attribute, block, constant, cycle, dump, parent, random, range.其实部分函数,在tags的学习里已经见过了。attribute函数1.2版本新增他就相当于是个. 操作符。[html]view plaincopyprint?{{attribute(object,met...转载 2015-10-29 16:58:20 · 1632 阅读 · 0 评论 -
PHP Twig模版的Filters详解(中文)
目前支持的过滤器包括: date format replace number_format url_encode json_encode convert_encoding title capitalize nl2br upper lower striptags join reverse length sort default keys escape raw mergedate过滤...转载 2015-10-29 16:42:26 · 1985 阅读 · 0 评论 -
PHP Twig模版的tags详解(中文)
目前支持的tags包括 for if macro filter set extends block include import from use spaceless autoescape raw flush dotwig在html分为3种{{...}} 直接输出其中的变量{#...#...转载 2015-10-29 15:31:08 · 2803 阅读 · 0 评论 -
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图等
JpGraph简介 JpGraph是开源的PHP统计图表生成库,基于PHP的GD2图形库构建,把生成统计图的相关操作封装,隐藏了部分复杂的操作,使在PHP页面上输出统计图表变得更加容易。JpGraph的官方网站为:http://jpgraph.net,开发者可以在上面免费下载最新版的JpGraph和阅读相关帮助文档或示例程序。JpGraph的配置(1)修改文件原创 2015-07-19 17:07:53 · 31825 阅读 · 3 评论 -
Linux-CentOS 编译PHP扩展库.so
用到一个sh:/usr/local/php5/bin/phpize原理:在扩展文件夹里执行phpize,生成用于编译的文件。PHP安装路径:/usr/local/php5PHP源码路径:/home/default7/lamp/php-5.5.13扩展假设zlib:/home/default7/lamp/php-5.5.13/ext/zlib执行代码:转载 2015-10-17 18:32:57 · 1746 阅读 · 0 评论 -
PHP 文件系统
文件处理函数•basename — 返回路径中的文件名部分•chgrp — 改变文件所属的组•chmod — 改变文件模式•chown — 改变文件的所有者•clearstatcache — 清除文件状态缓存•copy — 拷贝文件•delete — 参见 unlink 或 unset•dirname — 返回路径中的目录部分•disk_free_space —原创 2015-07-20 06:52:25 · 911 阅读 · 0 评论 -
PHP 使用GD库生成验证码 在图像上绘制汉字
PHP 并不仅限于创建 HTML 输出, 它也可以创建和处理包括 GIF, PNG, JPEG, WBMP 以及 XPM 在内的多种格式的图像。 更加方便的是,PHP 可以直接将图像数据流输出到浏览器。 要想在 PHP 中使用图像处理功能,你需要连带GD 库一起来编译 PHP。 GD 库和 PHP 可能需要其他的库, 这取决于你要处理的图像格式。 你可以使用 PHP 中的图像函数来获取下列格式原创 2015-07-16 22:46:03 · 4947 阅读 · 0 评论