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

 

posted @ 2015-08-28 21:10  iYunBlog  阅读(190)  评论(0编辑  收藏  举报