PHP相关知识(面试题)

字符串相关函数
        1、implode 使用一个字符串将数组变成字符串

<?php
  $array  = array('lastname', 'email', 'phone');
  $result = implode(",", $array);    //lastname,email,phone
?>

      2、explode — 使用一个字符串分割另一个字符串,返回一个数组

<?php 
  $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
  $pieces = explode(" ", $pizza);
  echo $pieces[0]; // piece1
  echo $pieces[1]; // piece2

?>

       3、字符串截断

<?php
  substr("Hello world",6);   // world  
  substr(string,start,length)

?>

       4、替换
  

<?php
str_replace('@','#','[email protected]') //shwei#126.com
?>

数组
   1.数组合并
            array_merge (array array1 array2…,arrayN)
   2、单数组去重复  array_unique()
   3、多数组去重复  array_keys(array_flip($arr1)+array_flip($arr2))

<?php
   $a = array('1001','1002');
   $b = array('1002','1003','1004');
   $c = array('1003','1004','1005');
  
   $d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));
?>


   4、数组追加  array_push($arr, e1)
   5、删除  unset($arr2[$key]);

排序
      sort() 函数用于对数组单元从低到高进行排序。    array_multisort($a,SORT_ASC,$b,SORT_DESC);
      rsort() 函数用于对数组单元从高到低进行排序。
      asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
      arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
      ksort() 函数用于对数组单元按照键名从低到高进行排序。
      krsort() 函数用于对数组单元按照键名从高到低进行排序。

include,require
     使用require,如果文件没有包含成功,就会报出一个fatal error,整个程序就中止了。

     使用include,如果文件没有包含成功,就会报出一个普通的warning,之后的代码仍会执行。

     如果你的Web程序使用了MVC这种对文件包含强依赖的设计方法,请使用require_once。

扫描二维码关注公众号,回复: 2383457 查看本文章

     include_once()  如果该文件中的代码已经被包含了,则不会再次包含

merger 和 + 的区别
       array_merge()函数用于将一个或者多个数组的单元合并起来,返回结果为数组。
            ①如果合并的数组中有相同的字符串键名,则后面的值覆盖前面的值,键名不变
            ②如果合并的数组中有相同的数字键名,则后面的值不覆盖前面的值,而是依次附加到后面
            ③如果只有一个数组,并且该数组是数字索引的,则键名会以连续方式重新索引。
      array+array是数组的联合运算
            ①如果合并的数组中有相同的字符串键名,则取最先出现的值而把后面拥有相同键名的那些值“抛弃”
            ②如果合并的数组中有相同的数字键名,则取最先出现的值而把后面拥有相同键名的那些值“抛弃”
            ③如果只有一个数组,并且该数组是数字索引的,则键名会以连续方式重新索引。


session扩展将session数据存在哪里
           保存在文件或数据库中,默认情况下,PHP.ini 中设置的 SESSION 保存方式是 files

静态变量

<?php
    function add(){ 
        static $a = 1; 
        echo $a,"<br />"; 
        $a++; 
    } 
    add();   //1
    add();   //2
    add();   //3
    add();   //4
?>
<?php
$a = "hello";
$a[] = "worlld";
echo #a
报错
?>

$a=[1=>3,5=>5,33,'b'=>55,'d'=>44,34,3=>3,66];键名分别是什么
     Array ( [1] => 3 [5] => 5 [6] => 33 [b] => 55 [d] => 44 [7] => 34 [3] => 3 [8] => 66 )

1. 什么事面向对象?主要特征是什么?
       面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。
 
2. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?

       1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。

     2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。

    禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。
    Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。
  
3. HTTP 状态中302、403、 500代码含义?

      一二三四五原则: 一. 消息系列  二成功系列      三. 重定向系列  四. 请求错误系列      五. 服务器端错误系列

      302:临时转移成功,请求的内容已转移到新位置403:禁止访问 500:服务器内部错误 401代表未授权。
 
4.请问 varchar 和 char有什么区别?
   char是固定长度的字符类型,分配多少空间,就占用多长空间。Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。
        由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。
 
5. 数据库引擎MyISAM和 InnoDB 的基本区别?

    MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。
 
6. isset() 和 empty() 区别

   Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。
 
7. 如何在页面之间传递变量(至少两种方式) ?  

       GET,POST,COOKIE,SESSION,隐藏表单

8. 写出匹配URL的正则表达式.

       ‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’
 
9. 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
         按值传递:函数范围内对值的任何改变在函数外部都会被忽略

        按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

      优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
  
10.电子邮件正则表达式
       preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email

 11.自动加载类
       function __autoload($class_name)

 
12.你所知道的php数组相关的函数?

     array_combine()----通过合并两个数组来创建一个新数组

     range()----创建并返回一个包含指定范围的元素的数组

     compact()----建立一个数组

     array_chunk()----将一个数组分割成多个

     array_merge()----把两个或多个数组合并成一个数组

     array_slice()----在数组中根据条件取出一段值

     array_diff()----返回两个数组的差集数组

     array_intersect()----计算数组的交集

     array_search()----在数组中搜索给定的值

     array_splice()----移除数组的一部分且替代它

     array_key_exists()----判断某个数组中是否存在指定的key

     shuffle()----把数组中的元素按随机顺序重新排列

     array_flip()----交换数组中的键和值

     array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回

     array_unique()----移除数组中重复的值
 
 
13.以下程序,变量str什么值的情况下输入111?

        if( ! $str ) { echo 111; }

        在$str值为:0,’0′,false,null,”"
 
14.用PHP打印出前一天的时间
          date('Y-m-d H:i:s', strtotime('-1 days'))
         上个月第一天   date('Y-m-01', strtotime('-1 month'))
         上个月最后一天 date('Y-m-t', strtotime('-1 month'))

15.以下语句输出的结果是什么
      $a = 3;
      echo "$a",'$a',"\\\$a","${a}","$a"."$a","$a"+"$a";
      3 $a  \$a  3  33  6
 
16.php中将当前页面重定向到另一个页面怎么写?

      header();
 
17. $a = array(1,2,3);
      $a[] = $a;
      $a[] = &$a;
     内存泄漏,当自身引用自身时,这个容器不能被清楚,这就造成了内存泄漏 


18.php的垃圾回收机制
            垃圾回收机制GC只是一个引用计数的概念,当变量的引用数等于0时,就会被销毁。
  php的每个变量都是存在一个叫做zval的容器里面,这个容器不仅包含了这个变量的值和类型,还包含了另外两个重要的信息,“is_ref”和“refcount”,“is_ref”看名字就应该知道大概和引用相关,它是一个bool值,如果这个值是true那么代表这是一个引用变量,否则是普通变量。“refcount”指的是有多少个变量(符号)指向这个zval容器。
 
      如果一个zval容器的refcount增加,说明有新的变量(符号)指向这个容器,那么这个容器当然不会是垃圾,它将被继续使用。
            如果一个zval容器的refcount减少到0了,那么说明没有变量(符号)指向这个容器,它就会被php引擎销毁。
            如果一个zval容易的refcount减少了,但是不是0,那么这个容器就有可能是垃圾,就会被垃圾回收机制所管理。

 
 

 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/u011921996/article/details/81183244
今日推荐