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
0 条评论
发表一条评论