PHP面试题总结

原创 2016-11-18 11:00:10 1021
摘要:1.  echo和print的区别echo没有返回值,print有返回值1,执行失败时返回false;echo输出的速度比print快,因为没有返回值;echo可以输出一个或多个字符串,print只允许输出一个字符串;print可以用于复杂的表达式,echo不行。另问:echo是个函数吗?  echo不是函数,是语言结构。具体的解释可参见http://www.cnblogs.c

1.  echo和print的区别

echo没有返回值,print有返回值1,执行失败时返回false;echo输出的速度比print快,因为没有返回值;echo可以输出一个或多个字符串,print只允许输出一个字符串;print可以用于复杂的表达式,echo不行。

另问:echo是个函数吗?  echo不是函数,是语言结构。具体的解释可参见http://www.cnblogs.com/m1001m/archive/2013/03/24/2978219.html

2. 说几组数组有关函数

实在太多了,这里写几个好了,完整版参见http://www.runoob.com/php/php-ref-array.html

array()   创建数组。

array_diff()   比较数组,返回差集(只比较键值)。

array_pop()  删除数组的最后一个元素(出栈)。

array_rand()   返回数组中一个或多个随机的键。

array_replace()  使用后面数组的值替换第一个数组的值。

array_reverce()   以相反的顺序返回数组。

array_shift()  删除数组中首个元素,并返回被删除元素的值。

array_slice()  返回数组中被选定的部分。

array_splice()  删除并替换数组中指定的元素。

arsort()  对关联数组按照键值进行降序排序。

end()将数组的内部指针指向最后一个元素。

in_array()  检查数组中是否存在指定的值。

krsort()  对数组按照键名逆向排序。

next()  将数组中的内部指针向前移动一位。

reset()  将数组的内部指针指向第一个元素。

3. php中的魔术函数举例     哎呦,我脑子一抽就说出来了魔术变量,醉了。

     关于魔术函数呢,各方资料解释都不尽相同,大家多翻一翻,看看哪种说法你自己更容易理解。

__construct()  允许在实例化一个类之前先执行构造方法。

__destruct()  析构方法允许在销毁一个类之前执行的一些操作或完成一些功能。

__get(string $name)  用于获取私有属性值。读取一个对象的属性时, 若属性存在,则直接返回属性值;若不存在,则会调用__get函数。

__set(string $name,mixed $value)  用于设置私有属性。设置一个对象的属性时, 若属性存在,则直接赋值;若不存在,则会调用__set函数。

__call(string $name,array $arguments)  用于监视错误的方法调用。对象调用某个方法,若方法存在,则直接调用; 若不存在,则会去调用__call函数。静态方法中调用不存在或者不可访问的方法时,会调用__callStatic(string $name, array $arguments)  方法。

__tostring()  当打印对象时会被直接调用。如echo $obj;或print $obj。

__clone()  当对象被拷贝时直接调用。如$t=new Test();$t1=clone $t。

__sleep()  serialize之前被调用。若对象比较大,想删减一点再序列化,可考虑一下此函数。

__wakeup()  unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用__wakeup 方法,预先准备对象需要的资源。

__isset()  检测一个对象的属性是否存在时被调用。如:isset($c->name)。 

__unset()  unset一个对象的属性时被调用。如:unset($c->name)。

__set_state()  调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

__autoload()  实例化一个对象时,如果对应的类不存在,则该方法被调用。

__invoke()  当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

4. 往数据库里插入字段的MySQL语句

 假设我们的表名是users:

ALTER TABLE 'users' ADD 'uName' VARCHAR(200) NOT NULL AFTER 'uId';  //在uId字段后面加uName字段,中间的varchar 200 notnull都是属性

※那么问题来了,删除和修改语句都是什么呢?

 ALTER TABLE 'users'  DROP 'uName';   // 删除uName字段

 ALTER TABLE 'users' CHANGE 'uName' 'uId' INT(6) NOT NULL;   //将字段uName改为uId

5. LAMP和LNMP的区别

LAMP==Linux+Apache+Mysql+PHP
LNMP==Linux+Nginx+Mysql+PHP

wKiom1gtudmz3u2sAAEuTTwV-g4258.png-wh_651x-s_2584281609.png

wKiom1gtudmz3u2sAAEuTTwV-g4258.png-wh_651x-s_2584281609.png

6. HTTP请求错误返回码都有哪些?

3xx : 重定向   
301: 已移动 — 请求的数据具有新的位置且更改是永久的。   302: 已找到 — 请求的数据临时具有不同 URI。   
303: 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此 应。   
304: 未修改 — 未按预期修改文档。   
305: 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。   306: 未使用 — 不再使用;保留此代码以便将来使用。   4xx: 客户机中出现的错误   
400:  错误请求 — 请求中有语法问题,或不能满足请求。   401: 未授权 — 未授权客户机访问数据。   402: 需要付款 — 表示计费系统已有效。   403: 禁止 — 即使有授权也不需要访问。   
404: 找不到 — 服务器找不到给定的资源;文档不存在。   407: 代理认证请求 — 客户机首先必须使用代理认证自身。   
415: 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。   5xx: 服务器中出现的错误   
500: 内部错误 — 因为意外情况,服务器不能完成请求。  501: 未执行 — 服务器不支持请求的工具。   
502: 错误网关 — 服务器接收到来自上游服务器的无效响应。   
503: 无法获得服务 — 由于临时过载或维护,服务器无法处理请求。 900:内部错误(由程序运行时抛出异常终止请求,而生成的结果) 901:连接超时 902:响应超时 903:IO异常 
904:数据用尽(参数化时数据取尽) 905:未知主机异常 
906:URL协议异常(url格式错误) 
907:证书错误(https请求时使用本地证书,由证书问题导致的异常) 908:socket连接错误 910:IO异常中断 911:非法状态 912:不支持的操作 913:连接关闭 
914:没有http响应 915:请求中止

※问题又来了,请求成功返回什么呢?

2xx: 成功   
200:  正常;请求已完成。   201: 正常;紧接 POST 命令。   
202: 正常;已接受用于处理,但处理尚未完成。   203: 正常;部分信息 — 返回的信息只是一部分。   
204: 正常;无响应 — 已接收请求,但不存在要回送的信息。

7.  php版本之间的差异了解多少?

8.  用JS代码书写异步数据传输?

9.  字段为什么要加索引,哪些字段需要加索引?

10. 因为我个人有一些Linux系统开发经验,面试官问我熟悉的linux命令有哪些?

命令多的一拼,具体参见:http://www.runoob.com/linux/linux-command-manual.html。

这里列举几个常用的吧:

改变文件的权限:chmod

切换目录:cd

显示当前所在目录:pwd

建立新目录:mkdir

删除空的目录:rmdir

列出目前工作目录所含之文件及子目录:ls

复制档案或目录:cp

返回路径中的文件名:basename

返回路径中的目录:dirname

寻找特定档案:whereis   locate   find


发布手记

热门词条