PHP
文章平均质量分 62
栁罗风尘
这个作者很懒,什么都没留下…
展开
-
PHP测试第五部分(单元测试参数详解)
单元测试常用参数文章目录1. 指定单元测试函数2. 生成html代码覆盖报告3. 遇到错误时停止4. 测试前运行启动文件5. 指定测试配置文件6. 输出调试信息7. 添加PHP.ini配置8. 批量测试8. 常用注释测试参数1. 指定单元测试函数使用 --filter 参数指定单元测试执行的函数vendor\bin\phpunit --filter test_oper2. 生...原创 2019-03-18 10:15:17 · 540 阅读 · 0 评论 -
PHP实现url查询字符串与数组相互转换
1.数组转换成查询字符串$data = array( 'name' => 'zhangsan', 'age' => 13, 'job' => 'dirver');$query_str = http_build_query($data);echo $query_str;打印结果:name=zhangsan&a...原创 2017-12-14 20:42:34 · 7008 阅读 · 3 评论 -
php拼音检索
1. 系统使用拼音搜索,表里面加入三个字段即可即 拼音字段 pinyin 首字母字段 first_word 简写字段 short_cut如下表:id city pinyin first_wordshort_cut1 北京 beijingb bj2 杭州 hangzhouh hz3 广州 guangzhou g gz4 上海 sh原创 2017-12-12 22:06:33 · 1743 阅读 · 0 评论 -
PHP二维数组降一维函数array_column
很多情况下,我们数据库是以二维数据存储的,但是我们查出来以后,需要转成一维数组,PHP有这么一个函数array_column,能实现大部分的 二维数组转一维数组//PHP版本>= 5.5//PHP二维数组降一维函数$student = array( array('no' => 301,'name'=>'zhangsan','score'=>'60'), array('n原创 2017-12-20 18:54:25 · 5375 阅读 · 0 评论 -
swoole模拟多服务器Nginx反向代理实现负载均衡
一直想探索一下负载均衡,苦于经济能力,没有太多的服务器可用,于是借用php的 swoole 扩展根据不同的端口,启动了多个服务器,然后使用Nginx反向代理,尝试了一下负载均衡,具体搭建过程如下。1.安装lnmp具体的安装步骤就省略了,不会的参考一键安装包 注意最好编译安装,便于swoole的扩展编译2. 安装 swooleswoole的安装下载参考swoole官网3. 编写原创 2017-09-01 18:51:31 · 3423 阅读 · 0 评论 -
PHP面向对象深入理解之四(设计模式-观察者模式)
观察者模式对于PHP而言,有几个内置的接口实现,相关的模式,分别是 SplSubjectSubObserver 和SplObjectStoarge,相比uml类图,我比较喜欢用更通俗易懂的关系图解释现象,如下图。被观察者 通过映射对象 存储了所有的 观察者对应的对象映射,然后在被观察者发生改变的时候,会循环映射对像,通知所有的观察者,直接上代码。主体(被观原创 2017-08-29 21:03:20 · 434 阅读 · 0 评论 -
PHP面向对象深入理解之五(内省函数与反射类)
1. 内省(Introspection)函数Introspection(内省)程序在运行时检查对象的类型或属性的能力,他允许对象类由程序员操纵。你将会发现introspection 相当有用当你不知道哪一个类后或者方法在设计时需要被执行.Introspection 在 PHP 提供非常有用的能力去检查类(classes), 接口(interfaces), 属性(properties翻译 2017-08-15 21:37:54 · 1154 阅读 · 0 评论 -
PHP面向对象深入理解之四(设计模式-工厂模式)
适用于创建相同类型的模型类 能使代码更加健壮举个栗子:车Car --> 奥迪,福特,宝马... 我们要造一辆重要的是我们不需要引入所有相关类,我们只需要引入一个工厂类 即可interface Car{ public function makeCircle(); public function makeBody(); public function makeE原创 2017-08-06 17:54:26 · 458 阅读 · 0 评论 -
PHP面向对象深入理解之四(设计模式-单例模式)
所谓单例模式至始至终只有一个实例,不用开辟新的空间存储新的资源,常用于资源类型操作mysql/redis/memcache/pg 等等,需要注意的是,如果使用fork 子进程的方式,请在子进程中不要使用单例模式获取实例,可能会失去资源句柄,或者程序错乱,举个栗子:<?php class A{ static private $_instance = null;//定义一原创 2017-08-06 10:21:07 · 393 阅读 · 0 评论 -
PHP面向对象深入理解之三(类中的魔术方法)
通常情况下,不建议使用魔术方法,因为会增加opcode,影响程序的性能。1. __toString通常你使用print 打印一个类的时候,你会发现打印出来的类似于 Object id#1的id句柄,如果我们不想得到这样的句柄,那我们可以改写__toString 方法class A{ private $name = 'A class'; public funct原创 2017-08-05 18:21:55 · 346 阅读 · 0 评论 -
PHP面向对象深入理解之二(封装、继承、多态、克隆)
1.封装 所谓封装就是隐藏内部实现细节,提供外部访问方式 将一系列私有的特征保存起来 class Person { private $ID; public function setID($id) { $this->ID = ($id + 1)*3; } public function getID()原创 2017-08-05 11:06:32 · 1241 阅读 · 0 评论 -
PHP面向对象深入理解之一(访问修饰符)
1. 类 抽象类 接口之间的属性方法类型修饰关键字 类(class)抽象类(abstract class)接口(interface)属性 public ✔️ ✔️✘ private ✔️✔️原创 2017-08-05 09:43:18 · 506 阅读 · 0 评论 -
PHP并行编程探索之三(定时异步)
我们或多或少听过异步这个词,这个词在前端javascrtipt编程中很常见,就是对于定时的或ajax请求任务,我们不用等待,直接执行接下来的代码,直到之前的数据有返回。我们来看个栗子:console.log(new Date());setTimeout(function(){ console.log(new Date()); console.log('111')原创 2017-08-10 23:53:23 · 1868 阅读 · 1 评论 -
现代PHP三(闭包Closure)
1. 什么是闭包闭包个人理解就是一个能提供外部访问函数内局部变量的匿名函数2. 为什么要用闭包闭包的定义已经说明了,我们想在外部访问函数内的局部变量,为了达到这个目的,我们需要使用闭包。3. 闭包的使用(0) 使用前提PHP version >= 5.3.0(1) 匿名函数的使用我们先实现一个类似js的相加操作$add = function($type = 'number'){ if...原创 2018-03-14 22:42:51 · 387 阅读 · 0 评论 -
现代PHP一(命名空间)
1.命名空间的定义命名空间就是用虚拟的类似目录层次结构的方式组织PHP代码,2.为什么要使用命名空间避免与其他团队或个人代码融合时产生类名冲突,并遵循PSR-4代码加载规范3.命名空间的声明与使用(1)命名空间的声明命名空间的声明以namespace 关键字开头的语句并以;结尾,且必须在<?php 后的第一行使用如:<?phpnamespace Pay;如果有子命名空间可以加入 \...原创 2018-03-11 17:33:19 · 307 阅读 · 0 评论 -
PHP测试第四部分(单元测试常用函数)
单元测试常用函数文章目录1. 类型判断2. 数组3. 字符串4. 数字5. 文件和目录6. json7. xml8. 对象和类9. 复杂断言1. 类型判断断言函数/说明用例assertEmpty元素为空 使用assertFalse断言false 使用assertTrue断言为真 使用assertNull为空 使用assertIntern...原创 2019-03-15 17:46:41 · 311 阅读 · 0 评论 -
PHP测试第三部分(使用PHPstorm+xdebug测试代码覆盖率)
使用PHPstorm+xdebug测试代码覆盖率文章目录1. 配置php cli版本2. 配置test环境3. 执行代码覆盖测试4. 错误4.1 No code coverage driver is available4.2 No whitelist is configured, no code coverage will be generated.1. 配置php cli版本File ...原创 2019-03-15 15:26:03 · 673 阅读 · 1 评论 -
PHP测试第二部分(使用lumen编写单元测试)
使用lumen编写单元测试文章目录1. 控制器2. 编写测试用例3. 执行1. 控制器我们先写了一个简单的app控制器CalcController.php&lt;?phpnamespace App\Http\Controllers;class CalcController extends Controller{ /** * @todo: 简单计算 ...原创 2019-03-15 14:02:47 · 476 阅读 · 0 评论 -
PHP测试第一部分(概述)
测试概述原文地址:https://hackernoon.com/php-test-driven-development-part-1-introduction-5483362d79b5测试概述文章目录1. 测试分类1.1 单元测试1.2 集成测试1.3 功能测试1.4 验收测试1.5 TDD2. windows测试工具安装1. 测试分类1.1 单元测试单元测试是您可以进行的最低...翻译 2019-03-15 11:28:45 · 189 阅读 · 0 评论 -
PHP不四舍五入|只舍|只入|四舍五入
//保留两位小数 $power = pow(10,2); $num = 1666.667788; $num1 = 1666.61188; //全入 $yes_num = ceil($num*$power)/$power; //1666.67 $yes_num = ceil($num1*$powe...原创 2018-10-11 10:31:49 · 1921 阅读 · 0 评论 -
gearman的安装
1 .安装gearmand服务官网访问官网:https://launchpad.net/gearmand右侧下载# wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz# tar -zxvf gearmand-1.1.12.tar.gz# cd gearmand-1.1.1...原创 2018-08-08 08:44:51 · 1498 阅读 · 1 评论 -
PHP数组中的交集、并集、差集
$a = array(1,3,5);$b = array(3,6,7,8,9);$c = array('red'=>'z','green'=>'2');$d = array('red'=>'z','yellow'=>'3');1. 交集print_r(array_intersect($b,$a));print_r(array_intersect_a...原创 2018-08-01 11:19:25 · 4532 阅读 · 0 评论 -
PHP中socket的使用入门
一、客户端socket1. 创建socket$socket = socket_create(AF_INET, SOCK_STREAM, 0);该函数返回socket描述符,三个参数分别是:地址协议:AF_INET (这里是ipv4)连接接类型:SOCK_STREAM(面向连接的TCP协议)协议:0|IPPROTO_IP (IP协议)【错误处理】如果任何socket函数...翻译 2018-07-21 16:01:09 · 2641 阅读 · 1 评论 -
PHP中二进制的编码包pack与解包unpack
1. 为什么使用pack我们知道,在网络传输过程中,我们的数据都是以二级制的网络报文在进行传输,很多时候,我们多语言之间交互的时候,想在传输的过程中约定传输的头信息,比如常见的http协议 是展示的明文传输的 GET /game HTTP/1.1Host: sp0.baidu.comConnection: keep-alive但很多时候,比如我们要做的是游戏的排行榜,而游戏的分数...原创 2018-07-20 16:42:10 · 1707 阅读 · 0 评论 -
PHP调试(使用PHPStorm + Xdebug)
1. 调试概述PHPStorm可以实现的调试功能:[1] PHP中添加断点.[2] HTML 和 JavaScript 中添加断点.[3] 多个同步会话调试.[4] 可定制的断点调试属性 : conditions(条件), pass count(通过统计)等等.[5] 调试界面中包括 Frames, variables, 和 监控视图 views .[6] 运行可执行的表达式...原创 2018-07-03 19:47:15 · 4533 阅读 · 0 评论 -
现代PHP二(性状trait)
1. 性状的定义性状是类的部分实现,可以实现类的部分常量、属性和方法。2. 为什么要使用性状我们知道PHP大部分类的共性一般是使用类的继承来实现的,这样所有的子类都可以使用父类提供继承的方法和属性,但是,很多时候,我们会觉得继承的耦合性太强,有时候两个完全不相干的实物,也会有共同的属性和方法,比如计算机(AI)和人,都会思考和学习,但是他们是两个完全不同的物种,我们只需要用到他们学习的方法和属性,...原创 2018-03-12 23:14:51 · 314 阅读 · 0 评论 -
PHP并行编程探索之二(curl_multi函数组)
使用pcntl扩展实现的多进程终究只能运行在命令行模式,而我们接触的基本上都处在http请求模式下,那就真没有解决办法了么,有人说用curl,自身请求自身,好我们用curl看一下是不是有用: 为方便访问和调试,我使用的是CI框架,直接在控制器里操作。1. 使用curl(1) 首先我们添加一个耗时计算函数function microtime_float() {原创 2017-08-10 09:51:44 · 4016 阅读 · 0 评论 -
PHP并行编程探索之一(多进程)
说实话,我一直在想PHP并行编程是个什么样子的,网上查资料写的不多而且杂,决定根据大多数的资料总结一下。PHP 多进程我认为是PHP原生编程里最接近并发编程的,同时开始执行多个任务。多进程:多个进程(资源分配的最小单位)同时执行多个任务如上图所示,开辟了3个子进程,分别执行了3个不同的任务,同时开始执行这些互无关联的进程。有点异步的味道。异步:在一段程序执行的时候,不需原创 2017-08-09 18:04:52 · 2911 阅读 · 0 评论 -
PHP常用字符串函数小结
一、判断类型的函数is_bool() //判断是否为布尔型is_float() //判断是否为浮点型is_real() //同上is_int() //判断是否为整型is_integer() //同上is_string() //判断是否为字符串is_object() //判断是否为对象is_array()原创 2015-01-16 11:31:21 · 4275 阅读 · 0 评论 -
PHP常用数组函数总结(转载)
一、数组操作的基本函数数组的键名和值array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名array_flip($arr); 数组中的值与键名互换(如果有重复前面的会被后面的覆盖)in_array("apple",$arr); 在数组中检索applearray_search("apple",$arr); 在数组中检索appl转载 2015-01-13 14:37:11 · 722 阅读 · 0 评论 -
PHP自定义数组排序
/** 二维数组自定义排序函数* uasort($arr,function_name)***/$arr = array( array('a'=>1,'b'=>'c'), array('a'=>4,'b'=>'a'), array('a'=>5,'b'=>'g'), array('a'=>7,'b'=>'f'), array('a'=>6,'b'=>'e'));fu原创 2014-12-07 21:12:54 · 7768 阅读 · 0 评论 -
PHP中的数组排序函数
/*排序函数的小小总结 sort/rsort 一般是对索引数组的升/降序 《值》排列 asort/arsort 一般是对索引或关联数组的升/降序 《值》 排列 ksort/krsort 一般是对索引或关联数组的升/降序 《键》 排列 usort、uasort、uksort是对用户自定义的 索引/关联/键名进行排列 没有升降之分,升降由用户自定义函数决原创 2014-12-07 21:36:11 · 752 阅读 · 0 评论 -
PHP二维数组去重
都知道一维数组去重用系统函数 array_unique($arr) 然后今天我用到二维数组了,也想去重,百度一大堆,都是将二维转一维 然后使用array_unique($arr)看得我很恼火,所以决定自己写一个。比他的简单好懂,记录下来,以备后用header('content-type:text/html;charset=utf8');$arr = array(array('i原创 2014-12-04 15:28:52 · 760 阅读 · 0 评论 -
关于php.ini的若干问题小结
① 时区问题②上传问题③页面执行超时问题④魔术引号的开启与关闭⑤安装扩展程序⑥开启扩展程序库原创 2015-01-09 16:07:20 · 888 阅读 · 0 评论 -
PHP 二维数组按某列进行排序
/** 二维数组 按某列排序* array_multisort($arr1,$arr2)* 手册 例子如下**/$data[] = array('volume' => 67, 'edition' => 2);$data[] = array('volume' => 86, 'edition' => 1);$data[] = array('volume' => 85,原创 2014-12-01 23:24:13 · 1247 阅读 · 0 评论 -
教你如何彻底解决网页中文乱码
一般来说,做好两件事就可以防止乱码了;①就是在页面中明确声明网页的编码原创 2014-10-19 16:44:35 · 2741 阅读 · 0 评论 -
PHP中常用的类型转换
常用的类型转换如下:1、字符与数字的转换(1)chr() 将ASCII值转换成对应的字符chr(65) 'a'(2)ord() 将字符转换成对应的ASCII值ord('a') 652、字符串与数字的转换(1) strval() 将数字转换成对应的字符串strval(123456) '123456'(2) intval(原创 2014-10-18 22:26:36 · 6875 阅读 · 0 评论 -
ob_flush和flush的使用
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..ob_*系列函数, 是操作PHP本身的输出缓冲区.所以, ob_flush是刷新PHP自身的缓冲区.而flush, 严格来讲, 这个只有在PHP做为apache的Module(ha转载 2014-11-14 15:26:27 · 1602 阅读 · 0 评论 -
PHP 截取网页中的固定种子链接
经常的下载链接比较多的时候,就像一次性将所有的原创 2014-09-03 17:21:46 · 651 阅读 · 0 评论 -
PHP输出到文件时 不会换行问题解决办法
【换行问题】 有两种换行问题:【① 写入文件换行】 windows下换换行 \r\n Linux 下换行 \n 需要注意的是 在换行的途中,如果包裹换行符的不是双引号 则会原样输出 而不会 显示换行。 【② 读取文件换行】 nl2br(文件流) 会自动将\n或者 \r\原创 2014-09-03 17:02:43 · 3251 阅读 · 0 评论