php面试题--语言基础
-
简述POST和GET的区别?
-
GET使用URL或Cookie传参。而POST将数据放在BODY中。
-
GET的URL会有长度上的限制,则POST的数据则可以非常大。
-
POST比GET安全,因为数据在地址栏上不可见。
-
-
strlen()与mb_strlen()的作用分别是什么? strlen和mb_strlen都是用于截取字符串的,其中strlen只针对单字节编码字符,如果是多字节编码,如gbk和utf8,使用strlen会出现乱码,此时可以使用mb_strlen,专用于处理多字节编码的截取。
相关题目1:实现中文字符串截取无乱码的方法。
使用php内置函数 mb_substr() 自定义函数,如下:
<?php header('Content-Type:text/html;charset=utf8'); function substr_utf8($str,$start,$length) { return implode("",array_slice( preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY),$start,$length) ); } $str = '中国人民银行'; echo substr_utf8($str,2); //输出 人民银行
相关题目2: 如何求解字符串”中国2北333京”的字符数(一个中文一个字符),并找到第四个字符”北” 使用php内置函数
<?php header('Content-Type:text/html;charset=utf8'); $str = '中国2北333京'; echo mb_strlen($str,'utf8'); echo mb_substr($str,3,1,'utf8');
自定义函数实现求其长度,截取使用上面定义的substr_utf8
<?php header('Content-Type:text/html;charset=utf8'); function strlen_utf8($str) { return count(preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY)); } $str = '中国2北333京'; echo strlen_utf8($str);
-
下列哪个函数是用正则表达式将字符串分割到数组中()
A. Split B. implode C. explode D. join 答案:A
-
写出下列程序的输出结果
<?php $x = 87; $y = ($x % 7) * 16; $z = $x > $y ? 1 : 0; echo $z; ?>
The answer is 1.
-
写出下列几个预定义全局变量的作用
$_SERVER['DOCUMENT_ROOT'] // 当前运行脚本所在的文档根目录 $_SERVER['HTTP_HOST'] // 当前请求的HOST:头部的内容 $_SERVER['REMOTE_ADDR'] // 正在浏览当前页面的用户的ip地址 $_SERVER['HTTP_REFERER'] // 链接到当前页面的前一个页面的url地址 $_SERVER['SERVER_NAME'] // 当前运行脚本所在服务器主机的名称
-
include和require都能把另外一个文件包含到当前文件中,他们有什么区别?include_once和include_once又有什么区别?
二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么会提示一个错误,但程序会继续执行下去。 而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且程序终止执行。
这两种结构除了在如何处理失败之外完全一样。 once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
-
用最少的代码写一个求3值最大值的函数。
<?php function maximum($a,$b,$c) { return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c); } echo maximum(24,45,14);
-
echo(),print(),print_r()的区别?
echo是一个语言结构,输出一个或多个字符串; print()实际上不是一个函数(它是一个语言结构),因此可以不使用圆括号来括起它的参数列表,输出一个字符串 print_r()打印变量的值,基本类型,数组,对象。
echo $a,$b; print('<br />'); echo $a . $b; ,是echo本身支持的一种语法,而'.'是字符串连接操作符。使用 ’,‘ 的效率更高一些。
-
用php打印出前一天的时间格式是2006-5-10 22:21:21
<?php echo date("Y-m-d H:i:s",time()-3600*24); echo date("Y-m-d H:i:s",strtotime("-1 day"));
相关主题:求两个日期的差数,例如2009-3-1 ~2014-9-10的日期差数
(strtotime('2009-3-1') - strtotime('2014-9-10')) / 3600 * 24
-
不使用第三个变量交换两个变量的值
方案一: <?php $a = ‘PHP’; $b = ‘MySQL’; echo $a,$b; list($a,$b) = array($b,$a); echo “
”; echo $a,$b;方案二: 对字符进行编码,比如MD5、sha1、base64_encode,但要保证编码是可逆的 <?php $a = ‘PHP’; $b = ‘MySQL’; echo $a,$b; $a = base64_encode($a); $b = base64_encode($b); $a = $a . ‘&’ . $b; $b = explode(‘&’,$a); $a = base64_encode($b[1]); $b = base64_encode($b[0]); echo “
”; echo $a,$b; -
请说明php中传值和传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋值给另一个变量时,改变其中一个变量的值,将不会影响另一个变量。 引用赋值,这意味这新变量简单的引用了原始变量。改动新的变量将影响原始变量,反之亦然。使用引用赋值,简单地将一个&符号将要赋值的变量前(源变量)。对象默认是传引用。对于较大的数据,传引用比较好。这样可以节省内存开销。
相关题目1:What would the following code print to the browser? Why?
<?php $num = 10; function multiply($num){ $num = $num * 10; } multiply($num); echo $num; output will be 10 .
-
将1234567890转换成1,234,567,890每三位用逗号隔开的形式。
<?php $str = '1234567890'; function str($str){ $str = strrev($str); $str = chunk_split($str,3,','); $str = strrev($str); $str = ltrim($str,','); return $str; }
相关题目1: 如何实现字符串翻转? strrev(),不过这种方法都不能解决中文字符串翻转的问题.
<?php function strrev_utf8($str){ return implode("",array_reverse( preg_split("//u",$str) )); } $str = "预祝成功"; echo strrev_utf8($str);
相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出?
$str = 'www.baidu.com'; echo strrev(str_replace('www','',$str));
-
用PHP写出显示客户端和服务器端IP的代码。
客户端IP: $_SERVER['REMOTE_ADDR'] 服务端IP: $_SERVER['SERVER_ADDR']
-
简述如何得到当前执行脚本路径,包括所得到参数
获取当前执行脚本路径使用$_SERVER[‘SCRIPT_NAME’]或basename(FILE) 获取参数,使用$_SERVER[‘QUERY_STRING’]
-
What is the difference between foo()& @foo()?
foo()会执行这个函数,任何编译错误,语法错误,执行错误都会在页面上显示出来。 @foo()在执行这个函数时,会隐藏所有上述的错误讯息。
-
检测一个变量是否有设置的函数?是否为空的函数是?
isset 检测一变量是否设置 empty 检测是否为空