PHP基础面试题
无乱码截取中文字符
/** * utf8编码字符串截取无乱码 * @param $str * @param $start * @param $len * @return string */ function sub_str($str, $start, $len){ //数组字符 $str_array = preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY); $get_array = array_splice($str_array,$start,$len); return join("",$get_array); } $str='天气真好呀'; echo sub_str($str,3,1); echo mb_substr($str,3,1);
写出下列几个预定义全局变量的作用
$_SERVER['DOCUMENT_ROOT']//当前运行脚本所在的文档根目录
$_SERVER['HTTP_HOST ']//当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR']//正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER']//链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME']//当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息 S_FILES['userfile']['name']//客户端机器文件的原名称
$_FILES['userfile']['type']//文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size']//已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name']//文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error']//和该文件上传相关的错误代码
用最少的代码写一个求 3 值最大值的函数
function getMax($a, $b, $c) { return ($a > $b) ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c); } echo getMax(2, 7, 5);
简述 POST 和 GET 传输的最大容量分别是多少
POST 根据你 php.ini 文件配置(默认是 8M)
GET 的话大小限制在 2KB
差异:post是通过实体数据提交,可以通过表单提交大量信息。get数据通过URL参数 提交,传输的数据有限制。
不使用第三个变量交换两个变量的值(厉害)
/* 不使用第三个变量交换两个变量的值 */ // ================方法一================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; list($a,$b) = array($b,$a); echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; echo "<hr />"; // ================方法二================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; $a = $a.'&'.$b;//使用&连接两个字符串 // 根据&进行字符串分割 $b = explode('&', $a); $a = $b[1]; $b = $b[0]; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />';
请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。
那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。
这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&
符号加到将要赋值的变量前(源变量),reference 传送的是变量的地址而非它的值。
对象默认是传引用。
对于较大的数据,传引用比较好,这样可以节省内存的开销。
将 1234567890 转换成 1,234,567,890 每 3 ���用逗号隔开的形式
//第一种 $str = 1234567890; $r_str= strrev($str); $array_str =str_split($r_str,3);//返回数组 echo strrev(implode(',',$array_str)); //第二种 $str ='1234567890'; function str($str) { // 反转字符串,得到0987654321 $str = strrev($str); // 使用逗号分割字符串,得到098,765,432,1, $str = chunk_split($str,3,',');//返回字符串 // 再次反转字符串,得到,1,234,567,890 $str = strrev($str); // 去掉左边的",",得到1,234,567,890 $str = ltrim($str,','); return $str; } echo str($str);
ort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
什么是可变变量
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名
$a = 'hello'; $$a = 'world'; echo "$a ${$a}"; echo "$a $hello";
执行程序段<?php echo 8%(-2) ?>
将输出%为取模运算,输出 0$a % $b
其结果的正负取决于 $a 的符号。
echo ((-8)%3)."<br />";//输出 -2 echo (8%(-3))."<br />";//输出 2
数组函数 arsort 的作用是_;语句 error_reporting(2047)的作用是_
arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用 report All errors and warnings
以 Apache 模块的方式安装 PHP,在文件 http.conf 中首先要用语句_动态装载 PHP模块,然后再用语句_使得 Apache 把所有扩展名为 php 的文件都作为 PHP 脚本处理。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
一个函数的参数不能是对变量的引用,除非在 php.ini 中把____设为 on.
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
echo count("abc")
; 输出什么
输出 1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
写 5 个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数(厉害了我的姐)
/* 写 5 个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数。(新浪) */ // 方法一 function ext_name1($path){ $path_info = strrchr($path, '.');//.php return ltrim($path_info,'.'); } // 方法二 function ext_name2($path){ $path_info = substr($path,strrpos($path, '.')); return ltrim($path_info,'.'); } // 方法三 function ext_name3($path){ $path_info = pathinfo($path); return $path_info['extension']; } // 方法四 function ext_name4($path){ $arr = explode('.', $path); return $arr[count($arr)-1]; } // 方法五 function ext_name5($path){ $pattern = '/^[^\.]+\.([\w]+)$/'; //获取数组的第二个元素
return preg_replace($pattern, '${1}', basename($path)); } // 实例 $path = str_replace('\\', '/', __FILE__); echo "$path<br />"; echo ext_name1($path);echo "<br />"; echo ext_name2($path);echo "<br />"; echo ext_name3($path);echo "<br />"; echo ext_name4($path);echo "<br />"; echo ext_name5($path);echo "<br />";
PHP 的意思,它能干些什么
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
- 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
- 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
- 编写桌面应用程序。
a=′abcdef′;请取出a 的值并打印出第一个字母
echo $a{0} 或 echo $a[0](当做数组访问)
$a = in_array('01',array('1')) == var_dump('01' == 1),$a得值 FALSE
/* 运行以下程序,$a 的值是多少? */ $a = "hello"; $b = &$a; unset($b); $b = "world"; echo $a,$b; //hello
val=max(′string′,array(2,5,7),42);val 值为
array(2,5,7)
max 用法示例如下:
echo max(1,3,5,6,7);//7 echo "<br />"; echo max(array(2,4,5));//5 echo "<br />"; echo max(0,'hello');//0 echo "<br />"; echo max('hello','0');//hello echo "<br />"; echo max(-1,'hello');//hello echo "<br />"; //对于多个数组,max从左向右比较 //因此在本例中:2 == 2,但是4 < 5 $val = max(array(2,4,8),array(2,5,7));//array(2,5,7) var_dump($val); echo "<br />"; // 如果同时给出数组和非数组作为参数,则总是将数组视为最大值返回 $val = max('string', array(2, 5, 7), 42); var_dump($val);
Switch 完整语法和注意事项
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
简述 GBK、GB2312、BIG5 、GB18030
GB2312 支持的汉字较少,GBK 是相比 GB2312 汉字更为丰富,包括全部中日韩汉字,GB18030 相比 GBK 增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用 GBK 而繁体中文使用 BIG5。
计算某段字符串中某个字符出现的次数(例如 : gdfgfdgd59gmkblg 中 g 的次数)
$text = 'gdfgfdgd59gmkblg'; echo substr_count ( $text,'g');
以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)
print_r $val = 333;
// error,print_r 是一个函数,需加上括号,如果是 print 则可以print_r($val = 333);
// 正确$a += ($b = 4) + 5;
// notice,a未定义
foo[bar] = 'enemy';可以正确运行// Notice: Use of undefined constant a - assumed 'bar',最好 bar 加上引号
function x($a = "1", $b){}`// 无,但给参数默认值应尽量从右向左
程序运算
$a1 = null; $a2 = false; $a3 = 0; $a4 = ''; $a5 = '0'; $a6 = 'null'; $a7 = array(); $a8 = array(array()); echo empty($a1) ? 'true' : 'false';//ture echo '<br />'; echo empty($a2) ? 'true' : 'false';//ture echo '<br />'; echo empty($a3) ? 'true' : 'false';//ture echo '<br />'; echo empty($a4) ? 'true' : 'false';//ture echo '<br />'; echo empty($a5) ? 'true' : 'false';//ture echo '<br />'; echo empty($a6) ? 'true' : 'false';//false echo '<br />'; echo empty($a7) ? 'true' : 'false';//ture echo '<br />'; echo empty($a8) ? 'true' : 'false';//false