zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    BDB c++例子,从源码编译到运行
    Linux的nm查看动态和静态库中的符号
    转:js包装DOM对象
    svn笔记4属性Properties
    c++ 友元函数
    转:js包装DOM对象
    整除规则(原理,性质)
    回溯法求幂集
    转:Javascript继承机制的设计思想
    javascript prototype __proto__区别
  • 原文地址:https://www.cnblogs.com/webph/p/6641425.html
Copyright © 2011-2022 走看看