PHP面试题集锦一
1、echo()、print()、print_r()、var_dump() 和 var_export() 的区别:
相同点:
❶、笼统的概括为他们都可以输出变量内容
不同点:
❶、echo():输出一个或者多个字符串或变量值,它是一个语言结构而非函数。因为他不是函数,所以它没有返回值
1 <?php 2 for ($i = 97; $i <= 103; $i++) { 3 $arr[chr($i)] = $i . PHP_EOL; 4 } 5 extract($arr); 6 echo 'a = ' . $a, 'b = ' . $b, 'c = ' . $c; 7 echo('d = ' . $d); 8 echo "e = $e"; 9 echo 'f = $f' . PHP_EOL; 10 echo ('g = ') . $g; 11 12 运行结果: 14 a = 97 15 b = 98 16 c = 99 17 d = 100 18 e = 101 19 f = $f 20 g = 103
❷、print():输出一个或多个字符串或变量值。它只能打印出简单类型变量的值(如:int、string等),不能打印数组和对象。它本质上也是一个语言结构而非函数,因此它无法被“变量函数”调用,速度稍慢于echo
1 <?php 2 $arr = [ 3 'a' => 'string' . PHP_EOL, 4 'b' => 2015 . PHP_EOL, 5 'c' => null . PHP_EOL, 6 'd' => 65 . PHP_EOL, 7 ]; 8 extract($arr); 9 print $a; 10 print($b); 11 $d = print($d); 12 print $d . PHP_EOL; 13 14 运行结果: 15 string 16 2015 17 65 18 1
❸、print_r():输出复杂类型变量的值(如:数组、对象、资源等)。它是函数,有两个参数,第一个是变量,第二个是 boolean 值,如果设置为 true,则返回原值,不打印输出,否则,则返回 true(赋值情况下),有返回值。print_r() 将把数组的指针移到最后边,使用 reset() 可让指针回到开始处
1 <?php 2 $arr = [ 3 'string', 4 2015, 5 null, 6 3.1415926, 7 true, 8 (new SplQueue()), 9 ]; 10 print_r($arr); 11 12 $var1 = print_r($arr[0]); 13 print_r(PHP_EOL . $var1); 14 $var2 = print_r(PHP_EOL . $arr[1], true); 15 print_r($var2); 16 17 运行结果: 18 Array 19 ( 20 [0] => string 21 [1] => 2015 22 [2] => 23 [3] => 3.1415926 24 [4] => 1 25 [5] => SplQueue Object 26 ( 27 [flags:SplDoublyLinkedList:private] => 4 28 [dllist:SplDoublyLinkedList:private] => Array 29 ( 30 ) 31 32 ) 33 34 ) 35 string 36 1 37 2015
❹、var_dump():输出一个或多个表达式的结构信息,包括表达式的类型、值、长度等信息,常用来调试
1 <?php 2 $arr = [ 3 'string', 4 2015, 5 null, 6 3.1415926, 7 false, 8 (new SplStack()), 9 ]; 10 var_dump($arr); 11 var_dump($arr[0], $arr[1], $arr[2], $arr[3], $arr[4], $arr[5]); 12 13 运行结果: 14 array(6) { 15 [0] => 16 string(6) "string" 17 [1] => 18 int(2015) 19 [2] => 20 NULL 21 [3] => 22 double(3.1415926) 23 [4] => 24 bool(false) 25 [5] => 26 class SplStack#1 (2) { 27 private $flags => 28 int(6) 29 private $dllist => 30 array(0) { 31 } 32 } 33 } 34 string(6) "string" 35 int(2015) 36 NULL 37 double(3.1415926) 38 bool(false) 39 class SplStack#1 (2) { 40 private $flags => 41 int(6) 42 private $dllist => 43 array(0) { 44 } 45 } 46 string(6) "string" 47 bool(true)
❺、var_export():输出或返回一个变量的字符串表示,此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码,可以通过将函数的第二个参数设置为 true,从而返回变量的表示。当 var_export() 的变量是 resource 类型时,var_export() 会返回 NULL
1 <?php 2 $arr = [ 3 'string', 4 2015, 5 null, 6 3.1415926, 7 false, 8 (new SplStack()), 9 fopen('test.txt', 'r'), 10 ]; 11 var_export($arr); 12 $var = var_export($arr, true); 13 echo $var . PHP_EOL; 14 print $var . PHP_EOL; 15 print_r($var); 16 var_dump($var); 17 var_export($var); 18 19 运行结果: 20 array ( 21 0 => 'string', 22 1 => 2015, 23 2 => NULL, 24 3 => 3.1415926000000001, 25 4 => false, 26 5 => 27 SplStack::__set_state(array( 28 )), 29 6 => NULL, 30 ) 31 array ( 32 0 => 'string', 33 1 => 2015, 34 2 => NULL, 35 3 => 3.1415926000000001, 36 4 => false, 37 5 => 38 SplStack::__set_state(array( 39 )), 40 6 => NULL, 41 ) 42 array ( 43 0 => 'string', 44 1 => 2015, 45 2 => NULL, 46 3 => 3.1415926000000001, 47 4 => false, 48 5 => 49 SplStack::__set_state(array( 50 )), 51 6 => NULL, 52 ) 53 array ( 54 0 => 'string', 55 1 => 2015, 56 2 => NULL, 57 3 => 3.1415926000000001, 58 4 => false, 59 5 => 60 SplStack::__set_state(array( 61 )), 62 6 => NULL, 63 ) 64 string(151) "array ( 65 0 => 'string', 66 1 => 2015, 67 2 => NULL, 68 3 => 3.1415926000000001, 69 4 => false, 70 5 => 71 SplStack::__set_state(array( 72 )), 73 6 => NULL, 74 )" 75 'array ( 76 0 => \'string\', 77 1 => 2015, 78 2 => NULL, 79 3 => 3.1415926000000001, 80 4 => false, 81 5 => 82 SplStack::__set_state(array( 83 )), 84 6 => NULL, 85 )'
2、exit() 和 die()的区别:
❶、exit():输出一个消息并且退出当前脚本,中止脚本的执行。尽管调用了 exit(),shutdown 函数以及 object destructors 总是会被执行。如果 status 是一个字符串,在退出之前该函数会打印 status。如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。状态码0用于成功中止程序。它是一个语言构造器而不是一个函数,不能被可变函数调用,并且没有返回值
实例一:
1 exit; // 什么也没有 2 exit(); // 什么也没有 3 exit(0); // 什么也没有 4 exit(1); // 不要期待会输出1,其实什么也没有 5 exit(123); // 不要期待会输出123,其实什么也没有
实例二:
1 <?php 2 class Foo { 3 public function __destruct() { 4 echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL; 5 } 6 } 7 8 function shutdown() { 9 echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL; 10 } 11 12 $foo = new Foo(); 13 register_shutdown_function('shutdown'); 14 exit(); 15 echo '呵呵……这个是不会输出的!'; 16 17 运行结果: 18 Shutdown: shutdown() 19 Destruct: Foo::__destruct()
❷、die():同exit(),die() 是 exit() 函数的别名,无返回值。虽然两者相同,但通常使用中也有细微的选择性,当传递给 exit 和 die 函数的值为0时,意味着提前终止脚本的执行,通常用 exit() 这个名字,当程序出错时,可以给它传递一个字符串,它会原样输出在系统终端上,通常使用 die() 这个名字。当PHP为脚本形式运行时时,建议使用 exit() 函数,当PHP为网站形式运行时,建议使用 die()
1 die; // 什么也没有 2 die(); // 什么也没有 3 die(0); // 什么也没有 4 die(1); // 不要期待会输出1,其实什么也没有 5 die(123); // 不要期待会输出123,其实什么也没有
之所以会出现这种情况,是因为 die(123) 表示一种运行状态为 123,即输出的内容是数字时,表示“命令的结束状态”,非将此输出到控制台或网页上
❸、如果要一定输出结果到控制台或者网页,请尽量避免使用数字状态
1 exit('123'); // 123 2 die('123'); // 123