PHP
码农老张Zy
原【硬核项目经理】
展开
-
它终于来了!一起来探查PHP8测试版都有些啥东东
它终于来了!一起来探查PHP8测试版都有些啥东东其实 PHP8 的这个第一版测试版 (php-8.0.0alpha1) 在2020年6月底就已经上线了,不过也是近两天去官网的时候才看到。...原创 2020-07-13 18:02:00 · 420 阅读 · 0 评论 -
PHP的内置WEB服务器
PHP的内置WEB服务器在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP...原创 2020-07-06 18:03:00 · 664 阅读 · 0 评论 -
PHP设计模式之模板方法模式
模板方法模式,也是我们经常会在不经意间有会用到的模式之一。这个模式是对继承的最好诠释。当子类中有重复的动作时,将他们提取出来,放在父类中进行统一的处理,这就是模板方法模式的最简单通俗的解释。就像我们平时做项目,每次的项目流程实都差不多,都有调研、开发、测试、部署上线等流程。而具体到每个项目中,这些流程的实现又不会完全相同。这个流程,就像是模板方法,让我们每次都按照这个流程进行开发。Gof类图及解释GoF定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不原创 2020-07-08 11:00:35 · 183 阅读 · 0 评论 -
PHP设计模式之门面模式
门面模式,也叫外观模式。不管是门面还是外观,都是我们对外的媒介,就好像我们的脸面一样。所以,这个模式最大的特点就是要表现的“好看”。怎么说呢?一堆复杂的对象调用,自己都看蒙了,特别是对老系统进行升级维护的时候。用门面来把老系统的功能调用封装起来,在外面看来就和新系统一样,这就是门面模式的用途啦!Gof类图及解释GoF定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。GoF类图代码实现class SubSystemOne原创 2020-07-07 16:13:36 · 198 阅读 · 0 评论 -
PHP设计模式之桥接模式
桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟悉面向对象的我们都知道继承的好处,子类可以共享父类的很多属性、功能。但是,继承也会带来一个问题,那就是严重的耦合性。父类的修改多少都会对子类产生影响,甚至一个方法或属性的修改都有可能让所有子类都去修改一遍。这样就违背了开放封装原则。而桥接就是为了解决这个问题,它强调的是用组合/聚合的方式来共享一些能用的方法。相信大家一定想到了php中的trait,如果你在工作中使用过这个特性,那么你就已经用过桥接模式了!Gof类图及解释GoF定义:将原创 2020-07-06 08:57:37 · 1476 阅读 · 0 评论 -
PHP设计模式之备忘录模式
备忘录,这个名字其实就已经很形象的解释了它的作用。典型的例子就是我们原来玩硬盘游戏时的存档功能。当你对即将面对的大BOSS有所顾虑时,一般都会先保存一次进度存档。如果挑战失败了,直接读取存档就可以恢复到挑战BOSS前的状态,然后你就开开心心的再去练一会级回来解决这个大BOSS就好了。不过,为了以防万一,在挑战BOSS之前存个档总是好的。另外一个例子就是我们码农们天天要用到的代码管理工具Git或者Svn了。每次的提交都像是一次存档备份,当新代码出现问题的时候,直接回滚恢复就行了。这些,都是备忘录模式的典型应用原创 2020-07-04 15:05:13 · 184 阅读 · 0 评论 -
PHP设计模式之建造者模式
建造者模式,也可以叫做生成器模式,builder这个词的原意就包含了建筑者、开发者、创建者的含义。很明显,这个模式又是一个创建型的模式,用来创建对象。那么它的特点是什么呢?从建筑上来说,盖房子不是一下子就马上能把一个房子盖好的,而是通过一砖一瓦搭建出来的。一个房子不仅有砖瓦,还有各种管道,各种电线等等,由它们各个不部分共同组成了一栋房子。可以说,建造者模式就是这样非常形象的由各种部件来组成一个对象(房子)的过程。Gof类图及解释GoF定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不原创 2020-07-03 10:14:29 · 204 阅读 · 0 评论 -
PHP设计模式之中介者模式
上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介。大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈。既然需要长期的租房,那么因为工作或者生活的变动,不可避免的一两年或者三五年就要和房产中介打一次交道。有的时候,我们租房并不一定会知道房主的信息,房主也不用知道我们的信息,全部都由中介来进行处理。在这里,中介就成为了我们沟通的桥梁,这种情况其实就像是房主出国了或者在外地有事儿而将房子完全的托管到了中介手中。类似于这种情况,在代码世界中,就是中介者模式的典型应用。Gof类图原创 2020-07-02 17:28:24 · 209 阅读 · 0 评论 -
PHP设计模式之组合模式
互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内。但是很多传统企业,则会有非常深的层级关系,从数据结构看,这种按职能进行分组的组织架构非常像一颗树。而我们今天介绍的组合模式的作用就和这个企业组织架构层级的模式非常类似。Gof类图及解释GoF定义:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性GoF类图代码实现abstract class Compon原创 2020-07-01 08:55:52 · 1474 阅读 · 0 评论 -
PHP设计模式之享元模式
享元模式,“享元”这两个字在中文里其实并没有什么特殊的意思,所以我们要把它拆分来看。“享”就是共享,“元”就是元素,这样一来似乎就很容易理解了,共享某些元素嘛。Gof类图及解释GoF定义:运用共享技术有效地支持大量细粒度的对象GoF类图代码实现interface Flyweight{ public function operation($extrinsicState) : void;}class ConcreteFlyweight implements Flyweight原创 2020-06-30 10:08:02 · 248 阅读 · 0 评论 -
PHP设计模式之代理模式
代理人这个职业在中国有另外一个称呼,房产经济人、保险经济人,其实这个职业在国外都是叫做房产代理或者保险代理。顾名思义,就是由他们来帮我们处理这些对我们大部分人来说都比较生疏的专业领域的工作。代理模式也是一样的道理,同时,在这篇文章中还会简单的介绍正向代理和反向代理是怎么回事。Gof类图及解释GoF定义:为其它对象提供一种代理以控制对这个对象的访问GoF类图代码实现interface Subject{ public function Request();}class Rea原创 2020-06-29 09:08:59 · 168 阅读 · 0 评论 -
PHP设计模式之责任链模式
责任链模式,属于对象行为型的设计模式。Gof类图及解释GoF定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。GoF类图代码实现abstract class Handler{ protected $successor; public function setSuccessor($successor) { $this->successor =原创 2020-06-28 08:56:19 · 189 阅读 · 0 评论 -
PHP设计模式之策略模式
策略模式,又称为政策模式,属于行为型的设计模式。Gof类图及解释GoF定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化 。GoF类图代码实现interface Strategy{ function AlgorithmInterface();}class ConcreteStrategyA implements Strategy{ function AlgorithmInterface(){原创 2020-06-24 10:17:19 · 190 阅读 · 0 评论 -
PHP设计模式之命令模式
命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例。作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者。那么,这个模式解决了什么呢?当你要修改菜单的时候,只需要和服务员说就好了,她会转达给厨师,也就是说,我们实现了顾客和厨师的解耦。也就是调用者与实现者的解耦。当然,很多设计模式可以做到这一点,但是命令模式能够做到的是让一个命令接收者实现多个命令(服务员下单、拿酒水、上菜),或者把一条命令转达给多个实现者(热菜厨师、凉菜厨师、主食师傅)。这才是命令模式原创 2020-06-23 09:29:48 · 261 阅读 · 0 评论 -
PHP设计模式之原型模式
原型模式其实更形象的来说应该叫克隆模式。它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是,这个模式就这样被命名了。说真的,从使用方式来看真的感觉叫克隆模式更贴切一些。Gof类图及解释GoF定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象GoF类图代码实现abstract class Prototype{ public $v = 'clone' . PHP_EOL; public function __construct()原创 2020-06-22 09:44:11 · 203 阅读 · 0 评论 -
PHP设计模式之迭代器模式
一说到这个模式,就不得不提循环语句。在《大话设计模式》中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得。任何语言都有这种类似的语法可以方便快捷的对数组、对象进行遍历,从而让迭代器模式从高高在上的23大设计模式中的明星慢慢成为了路人。特别是我们这门PHP语言,PHP的强大之处就在于对于数组的灵活操作,本身就是hashmap的结构,自然会有各种方便的数组操作语法,而foreach也是我们最常用的语句,甚至比for还常用。Gof类图及解释GoF定义:提供一种方原创 2020-06-20 09:23:16 · 242 阅读 · 0 评论 -
PHP设计模式之观察者模式
观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的一部美剧《危机边缘》,在这个剧集中,观察者不停的穿越时空记录着各种各样的人或事。但是,设计模式中的观察者可不只是站在边上看哦,这里的观察者是针对主体发生的状态改变来做出对应的动作。Gof类图及解释GoF定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新GoF类图代码实现interface Observer{ public function update(Su原创 2020-06-19 17:00:06 · 355 阅读 · 1 评论 -
PHP设计模式之适配器模式
这个模式一直以来都有一个很经典的例子,那就是插座!没错,当我们从国外买回来电器,或者旅游出差去国外的时候,经常会需要一个电源适配器,因为我国的电压标准是220伏,而其他国家则有110伏的标准。而这个电源适配器正是适配器模式的一种标志。当对象不太符合要求的时候,给他加一个适配器呗!!Gof类图及解释GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作GoF类图继承式组合式代码实现interface Targ原创 2020-06-18 09:44:32 · 201 阅读 · 1 评论 -
PHP设计模式之装饰器模式
工厂模式告一段落,我们来研究其他一些模式。不知道各位大佬有没有尝试过女装?据说女装大佬程序员很多哟。其实,今天的装饰器模式就和化妆这件事很像。相信如果有程序媛MM在的话,马上就能和你讲清楚这个设计模式。Gof类图及解释装饰这两个字,我们暂且把他变成化妆。首先你得有一张脸,然后打底,然后上妆,可以早上来个淡妆上班,也可以下班的时候补成浓妆出去嗨。当然,码农们下班的时间点正好是能赶上夜场的下半场的。话说回来,不管怎么化妆,你的脸还是你的脸,有可能可以化成别人不认识的另一个人,但这的的确确还是你的脸。这就是装原创 2020-06-17 10:21:17 · 288 阅读 · 0 评论 -
PHP设计模式之抽象工厂模式
工厂模式系列中的重头戏来了,没错,那正是传闻中的抽象工厂模式。初次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是非常高大上的,毕竟包含着“抽象”两个字。话说这两个字在开发中真的是有点高大上的感觉,一带上抽象两字就好像哪哪都很厉害了呢。不过,抽象工厂也确实可以说是工厂模式的大哥大。Gof类图及解释其实只要理解了工厂方法模式,就很容易明白抽象工厂模式。怎么说呢?还是一样的延迟到子类,还是一样的返回指定的对象。只是抽象工厂里面不仅仅只返回一个对象,而是返回一堆。GoF定义:提供一个创建一系列相关或相原创 2020-06-16 11:18:14 · 415 阅读 · 0 评论 -
PHP设计模式之工厂方法模式
上回说到,简单工厂不属于GoF的二十三种设计模式,这回可就来真家伙了,大名顶顶的工厂方法模式前来报道!GoF类图解释工厂方法模式对比简单工厂来说,最核心的一点,其实就是将实现推迟到子类。怎么理解呢?我们可以将上回的简单工厂当做父类,然后有一堆子类去继承它。createProduct()这个方法在父类中也变成一个抽象方法。然后所有的子类去实现这个方法,不再需要用switch去判断,子类直接返回一个实例化的对象即可。GoF定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Meth原创 2020-06-15 13:48:18 · 341 阅读 · 1 评论 -
PHP设计模式之简单工厂模式
先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式。毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式。在GoF设计模式中也都是属于创建型的模式。但是,能够说明白简单工厂、工厂模式、抽象工厂模式这三种模式的人还真能让面试官刮目相看。这里有个前提,是你真的能说明白,大部分人,包括在深入研究设计模式之前,我也没办法说清楚。不管是我去面试,还是面试其别人。当我面试别人的时候,能讲个大概也就差不多了。而我去面试的时候,也就是类似的讲个大概。经历不少原创 2020-06-11 10:48:15 · 287 阅读 · 0 评论 -
深入学习Composer原理(四)
本系列第四篇文章,也是最后一篇首先,我们先看看Composer的源码从哪里看起。当然,请您先准备好源码。composer init或者直接install之后,自动生成了一个vendor目录,这时您需要在文件中手动的require这个vendor目录下的autoload.php文件,其实这个文件又载入了vendor/composer/autoload_real.php。在autoload_real.php中,我们发现了熟悉的spl_autoload_register函数。但这个文件最大的作用是去加载Cl原创 2020-06-10 09:56:07 · 266 阅读 · 0 评论 -
深入学习Composer原理(三)
本系列第三篇文章,一起了解下PSR规范中的PSR4和PSR0规范首先恭喜大家,包括我自己,坚持到了现在。这篇文章之后,Composer的基础原理就清晰明了咯。也就是说,Composer所利用的正是spl_autoload_register()和PSR4规范,然后通过线上服务器存储包,来实现包管理的功能。spl_autoload_register()的作用我们已经清楚了,主要就是动态加载我们所需要的文件。然而我们的文件不可能都乱七八糟的随便找个目录放下,然后注册一堆的spl_autoload_registe原创 2020-06-09 09:37:36 · 257 阅读 · 0 评论 -
深入学习Composer原理(二)
本系列的第二篇文章,这次我们聊聊:spl_autoload_register()函数PHP的SPL库作为扩展库,已经于5.3.0版本后默认保持开启,成为PHP的一组强大的核心扩展库。大家有时间可以多研究研究SPL里面的方法功能。而且,SPL中包含很多类库哟,在设计模式的系列文章中,我们也会再次见到他们的身影!这回我们建立一个文件,叫做spl_autoload_register.php,然后将下面的代码复制进去吧:<?phpspl_autoload_register(function( $c原创 2020-06-08 11:40:04 · 301 阅读 · 0 评论 -
深入学习Composer原理(一)
Composer作为PHP的包管理工具,为PHPer们提供了丰富的类库,并且让PHP重焕新生,避免被时代淘汰的悲剧。可以说,Composer和PHP7是现在PHP开发者的标配,如果你还没用过Composer或者在PHP7的环境下工作,那么还真是有点落伍了哦!这次的系列文章将一步步的解析Composer原理,不会去讲解Composer的命令或者如何使用,这方面的内容您可以稳步Composer中文网:https://www.phpcomposer.com/第一篇主要了解一个简单的函数:__autoload原创 2020-06-06 11:07:19 · 247 阅读 · 0 评论 -
PHP的那些魔术方法(二)
上文中介绍了非常常用并且也是面试时的热门魔术方法,而这篇文章中的所介绍的或许并不是那么常用,但绝对是加分项。当你能准确地说出这些方法及作用的时候,相信对方更能对你刮目相看。__sleep()与__wakeup()字面上的意思很好玩,睡觉和起床。它们分别对应着serialize()和unserialize()方法,也就是序列化和反序列化时会触发这两个魔术方法。这里需要注意的是,__sleep()需要返回一个数组,而这个数组对应着类中的属性名。通常来说,它们可以在序列化前进行数据清理工作,或者反序列化原创 2020-06-05 09:44:43 · 159 阅读 · 0 评论 -
PHP的那些魔术方法(一)
在PHP中,有一堆魔术方法,服务于类和对象。PHP虽然也是纯种的面向对象语言,但是之前的PHP还真不是,所以有一些面向对象的标准实现并不完善,比如重载。但是,我们可以通过一些魔术方法来弥补,例如__call()方法就可以用来实现重载。话不多说,我们一个一个的来看。__construct()和__destruct()这两个是非常出名并且也是非常常用的魔术方法。__construct()是构造函数。在Java中,构造函数是与类名相同的方法名,而PHP在早期的版本中也是这样的,但从5以后改成了__con原创 2020-06-04 10:15:51 · 174 阅读 · 0 评论 -
PHP中的那些魔术常量
之前我们已经了解了一些常用的魔术方法,除了魔术方法外,PHP还提供一些魔术常量,相信大家在日常的工作中也都使用过,这里给大家做一个总结。其实PHP还提供了很多常量但都依赖于各类扩展库,而有几个常量是通用并且是跟随它们所在代码的位置来提供一些与位置有关的信息,这些就是***魔术常量***。魔术常量是不分大小写的,__LINE__和__line__是一样的,但对于工程化的开发来说,常量还是尽量以大写为主。__LINE__文件中的当前行号。echo __LINE__ . PHP_EOL; // 3原创 2020-06-03 09:48:07 · 606 阅读 · 0 评论 -
PHP中的输出:echo、print、printf、sprintf、print_r和var_dump
大家在面试中,经常会被问到的问题:请简要说明PHP的打印方式都有哪些?或者直接点问:请说明echo、print、print_r的区别看着很简单,一般会出现在初中级的笔试题中。但是要真正说明白这些语言结构或者函数也不是那么简单的事情。今天我们就来好好看看这些打印输出相关的内容。echo最基础的输出语句,不是函数是语言结构,不需要括号。可以使用参数列表,用逗号分隔。但如果加了括号就不能用逗号分隔着输出了。没有返回值。echo 'fullstackpm'; // 正常输出:fullstack原创 2020-06-02 09:11:59 · 328 阅读 · 1 评论 -
PHP中的static
关于静态变量和方法的问题也是面试中经常会出现的问题,这种问题多看手册搞明白原委就能解决,只是确实关于静态变量的问题还是比较绕的,这里我们就结合手册用实际的代码来看!class Test{ static $v = 'a'; static function showV() { echo self::$v; } function showVV() { echo self::$v; } static func原创 2020-06-01 09:40:43 · 299 阅读 · 0 评论