php高级面试技巧积累
huizhang.
EasySwoole开发组成员
展开
-
PHP Reflection API
简介 PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。PHP Reflection API有:class Reflection { }interface Reflector { }class ReflectionException extends Exception { }class ReflectionFu转载 2017-12-26 14:55:37 · 441 阅读 · 0 评论 -
PHP 反射机制
简介 面向对象变成中对象被赋予了自省的能力,而这个自省的过程就是反射。 反射,直观理解就是根据到达地找到出发地和来源。比方说,我给你一个光秃秃的对象,我可以仅仅通过这个对象就能知道它所属的类,拥有哪些方法。 反射指在php运行状态中,扩展分析php程序,导出或者提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射api如何使用反射原创 2017-12-26 15:19:47 · 336 阅读 · 0 评论 -
利用反射还原类的原型
代码<?php class person{ public $name; public $gender; public function say(){ echo $this->$name," \tis ",$this->$gender,"\r\n"; } public function __set($name,$value){转载 2017-12-26 16:11:30 · 266 阅读 · 0 评论 -
数据结构--堆
前序: 堆是基础数据结构中二叉树的一种,它还是笔试和面试题的常客。本文旨在通俗地的简介下堆的一些知识,附加一道爱奇艺笔试题,相信我,绝对通俗易懂!!!!!。堆定义及其分类: 堆是基础数据结构中二叉树的一种,堆不一定是完全二叉树但是一般采用完全二叉树,主要是利于存储和运算,堆分三种,下面我用图片直观地显示出来。无序堆转为小根或大根: 这类要求一半出现在...转载 2018-03-10 16:08:22 · 166 阅读 · 0 评论 -
in_array()的那些坑
先介绍一下需求背景: 发票方式: 0=捐赠(不要问我为什么,历史原因) 1=对中寄送 2=索取 3=电子发票现在要对用户提交的数据进行检测:php;auto-links:false;">if(!in_array($_POST['invoice_action'], array(0,1,2,3))){ throw new Exception...转载 2018-04-09 10:50:53 · 7004 阅读 · 0 评论 -
在 php 中如何接收 ajax 提交的 json 数据
请求头和请求体分别是:Content-Type:application/json;charset=UTF-8body: {"key":"276963ad39cbdd8fb960718981aedf0c","user_name":"wcj","password":"123456"}原因 究其原因是,Coentent-Type 仅在取值为 application/原创 2018-04-09 11:03:48 · 4918 阅读 · 0 评论 -
设计模式的类型
简介 可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。工厂模式(Fac...原创 2018-04-17 14:17:13 · 116 阅读 · 0 评论 -
表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.原创 2018-04-25 00:32:08 · 998 阅读 · 0 评论 -
session与cookie的区别?
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放 cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。 两者都可通过时间来设置时间长短...原创 2018-04-25 00:33:44 · 110 阅读 · 0 评论 -
数据库中的事务是什么?
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成, 事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。...原创 2018-04-25 00:34:51 · 2109 阅读 · 0 评论 -
php的三种CLI常量:STDIN,STDOUT,STDERR
PHP CLI(command line interface)中,有三个系统常量,分别是STDIN、STDOUT、STDERR,代表文件句柄。<?php //PHP CLI中,有三个系统常量,分别是STDIN、STDOUT、STDERR,代表文件句柄。 /** *@ 标准输入 *@ php://stdin & STDIN *@ STDIN是一个文...原创 2018-05-10 22:19:09 · 1878 阅读 · 0 评论 -
RESTful API 设计指南
概述 网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……)。 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现”API First”的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。协议 API与用户的通信协议,总是使用H...转载 2018-05-06 21:49:29 · 157 阅读 · 0 评论 -
c语言构建单向链表
/* 包含的头文件 */ #include <stdio.h> #include <stdlib.h> /* 定义一个表示链表的结构体指针 */ struct list { int id; /* 标识这个元素方便查找 */ char data[20]; /* 链表中包含的元素 */ struct...原创 2018-05-22 22:16:25 · 345 阅读 · 0 评论 -
设计模式-单例模式(单元素模式)
简介 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法优点 优点 一、实例控制 单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 二、灵活性 因为类控制了实例化过程,所以类可以灵活更改实例化过程。缺点 一、开销 虽然数量很少,但如果每次对象请求引用时都要检查是否原创 2017-12-06 10:59:27 · 376 阅读 · 0 评论 -
new一个对象给我们做了什么
new的过程 //创建对象用new关键字。那么这个new到底为我们做了什么呢? 有以下3步 // 1,在内存中开辟一块空间。 // 2, 在开辟的空中中创建对象。 // 3,调用对象的构造函数进行初始化对象。 //这3步,如果有一步完不成,你这个对象就创建不出来。所以构造函数的访问修饰符必须是public 。如果构造函数的访问修饰符是private的话,出了这个原创 2017-12-06 11:12:14 · 2514 阅读 · 0 评论 -
原型模式
简介 原型模式(对象克隆以避免创建对象时的消耗) 1:与工厂模式类似,都是用来创建对象。 2:与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作。 3:原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需要内存拷贝即可。Canvas.php<原创 2017-12-14 17:36:36 · 206 阅读 · 0 评论 -
php合并数组的几种方式
+号方式介绍规则:当两个数组的键名是数字键名或者字符串键名可以直接 +,$c = $a + $b,在$a后追加($b在$a中不存在的键名)键名和值。注意:不覆盖,只是追加不存在的键名和对应的值。键名不重新索引。无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回。代码array_merge说明规则:array_merge() 将一个或多个数原创 2017-11-13 23:50:13 · 14315 阅读 · 0 评论 -
算法复杂度
什么是算法复杂度 算法的(时间复杂度)和(空间复杂度)合称为算法的复杂度。时间复杂度时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。时间复杂度 在刚才提到的时间频度中,n称为问题的规原创 2017-11-15 15:33:39 · 397 阅读 · 0 评论 -
PHP__set和__get魔术方法
简介php和java重载的对比 php的重载和java等语言的重载不同。java里,重载指一个类中可以定义参数列表不同。java里,重载只一个类中可以定义参数列表不同但名字相同的多个方法。比如,java、也有构造函数,java允许有多个构造函数,只要保证方法签名不一样就行,而PHP则在一个类中只允许有一个构造函数php重载 php提供的重载指动态的创建类属性和方法。因此,__set和__g原创 2017-12-19 23:40:18 · 1033 阅读 · 0 评论 -
orm模型思想
简介 引用块内容对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。 狭义上,ORM可以被认为是,基于转载 2017-12-19 23:51:58 · 436 阅读 · 0 评论 -
assert函数的用法
assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;例如<?php$s = 123;assert("is_int($s)");?> 从这个例子可以看到字符串参数会被执行,这跟eval()类似。不过eval(codestr)只是执行符合php编码规范的code_str)只是执行符合php编码规范的code_str。 assert的用法却更详转载 2017-12-19 23:59:41 · 267 阅读 · 0 评论 -
php get_called_class()函数与get_class函数的区别
简介 get_class (): 获取当前调用方法的类名; get_called_class():获取静态绑定后的类名;代码 <?phpclass Foo{ public function test(){ var_dump(get_class()); echo "<br/>"; } public function test2(){ var_dump(get_ca原创 2017-12-20 10:40:59 · 1057 阅读 · 0 评论 -
php魔术方法__call和__callStatic
简介 当调用一个不可访问的方法时 (如未定义,或者不可见)时,__call()会被调用。其中 name参数时要调用的方法名称。name参数时要调用的方法名称。arguments参数时一个数组,包含着要传递给方法的参数代码<?php class Tuzi{ public function __call($name,$arguments){ switch(count($a原创 2017-12-20 09:58:46 · 266 阅读 · 0 评论 -
PHP中Trait详解及其应用
简介 从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是”特性”、”特点”,我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性。 熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式。在PHP中,只能实现单继承。而Trait则避免了这点。下面通过简单的额例子来进行对比说明。1. 继承 VS 多态 V转载 2017-12-20 11:52:46 · 454 阅读 · 0 评论 -
工厂模式
简介 许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏。 该问题在于紧密耦合 。系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起,以避免...原创 2017-12-05 09:57:04 · 186 阅读 · 0 评论 -
观察者模式
简介 观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。代码<?phpinterface IObserver{ function onCh原创 2017-12-14 16:08:11 · 157 阅读 · 0 评论 -
命令链模式
简介 命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。代码<?phpinterface ICommand{ function onCommand( $name, $args );}class CommandChain原创 2017-12-14 16:21:33 · 494 阅读 · 0 评论 -
策略模式
简介 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境。 eg:假如有一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有的广告位展示不同的广告。在传统的代码中,都是在系统中加入各种if else的判断,硬编码的方式。如果有一天增加了一种用户,就需要改写代码。使用策略模式,如果新增加一种用户类型,只需要增加一种策略就可以。其他所有的地方只需要使用不同原创 2017-12-14 17:03:30 · 179 阅读 · 0 评论 -
注册模式
简介 注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。代码<?phpclass Register{ protected static $objects; function set($alias,$object)//将对象注册到全局的树上 {原创 2017-12-14 17:27:23 · 510 阅读 · 0 评论 -
适配器模式
简介 将各种截然不同的函数接口封装成统一的API。 PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,可以将memcache,redis,file,apc等不同的缓存函数,统一成一致。 首先定义一个接口(有几个方法,以及相应的参数)。然后,有几种不同的情况,就写几个类实现原创 2017-12-14 17:31:16 · 206 阅读 · 0 评论 -
php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()
方法一简介 PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换。 原因是:中文是由多字节组成的,而只有英文系统的单个英文字符只有一个字节,所以该系统把中文的每一个字节都做了strtolower()处理,改变后的中文字节拼接在一起就成了乱码(新生成的编码映射对应的字原创 2017-11-13 23:15:09 · 916 阅读 · 0 评论