10个值得深思的php面试问题

1、如下代码的正确执行结果是? 答:”yabadabadoo” does not contains “yaba” 讲解:strpos(string $haystack , mixed $needle )函数的功能是:返回needle在haystack中首次出现的位置,未找到返回false,但也有可能返回等同于false的非布尔值。比如逐个例子中返回的就是0(字符串位置是从0开始)。而在php中0等同于false。 如想使代码正确运行: If(strpos($tsr1,$str2)) 改为 If(strpos($tsr1,$str2) !== false) 即可 2、下面的输出结果会是怎样? $x =5; echo $x; Echo $x+++$x++; Echo $x; Echo $x---$x--; Echo $x; 答案:5 11 7 1 5 讲解:$x++ 和 $x-- 是先返回它本身的值,然后在自增。并且 ++ 运算的优先级比 --运算的优先级要高。所以 “$x+++$x++”等同于 “5+6”;而 “$x---$x--” 等同于 “7-6”。 3、请问 $a 和 $b 的值各是多少? $a = ‘1’; $b = &$a; $b = “2$a”; 答案:$a = 21 $b =21 。 讲解:$b是对$a的引用。所以$b 和 $a 共用一个变量地址。所以当修改$b的时候也会修改$a的值。 4、写出下面代码的结果是ture还是false。 Var_dump(0123 == 123); Var_dump(‘0123’ == 123); Var_dump(‘0123’ === 123); 答案:false ture false。 讲解:0123会被当作8进制来处理,在转成10进制就是83 ,当然不相等。 ‘0123’会从字符串转成数值型,并且去掉前边的0,所以,123 == 123 。 ===是全等比较。字符串和数值型当然不全等。 5、下面的代码有什么问题?输出会是什么?怎样修复它? $referenceTable = array(); $referenceTable['val1'] = array(1,2); $refenenceTable['val2'] = 3; $referenceTable['val3'] = array(4,5); $testArray = array(); $testArray = array_merge($testArray,$referenceTable['val1']); var_dump($testArray); $testArray = array_merge($testArray,$referenceTable['val2']); var_dump($testArray); $testArray = array_merge($testArray,$referenceTable['val3']); var_dump($testArray); 答案:array(2) { [0]=> int(1) [1]=> int(2) } Warning: array_merge(): Argument #2 is not an array in E:\www\ceshi.php on line 19 NULL Warning: array_merge(): Argument #1 is not an array in E:\www\ceshi.php on line 21 NULL 讲解:array_merge()函数的参数只接受数组类型。如果不是则会返回null。第三次虽然传的参数是数组,但是$testArray已经变成了null。所以结果仍然是空。 正确修改(将参数强制转换成array类型): $testArray = array_merge($testArray,(array)$referenceTable['val1']); var_dump($testArray); $testArray = array_merge($testArray,(array)$referenceTable['val2']); var_dump($testArray); $testArray = array_merge($testArray,(array)$referenceTable['val3']); var_dump($testArray); 6、$x 应该输出什么? $x = true and false; Var_dump($x); 答案:bool(true) 讲解:这里考察的运算的优先级。 = 比and 优先级高一点。 所以等同于下面的代码: $x = true; True and false; 答案显而易见。 7、经过下面的运算,$x的值应该是多少? $x = 3 + “15%” + “$25”; 答案:18 讲解:当字符串与数字进行数学运算的时候,php会将字符串转换成数字。如果是数字开头的话会转成数字,例如 “15%”被转成15。而非数字开头的将被转成0,例如”$25”被转成0。所以上述代码相当于 $x = 3 + 15 + 0 ,结果就是18. 8、运行下面的代码,$text的值是多少?Strlen($text)又会返回什么结果? 答案: $text = John D strlen($text) = 11 讲解:$text[10] = 'Doe' 当给某个字符串具体的某个位置赋值具体字符,所以只会把D传给$text的第10个位置。所以结果是 John(五个空格)D。长度为11。 9、下面的输出结果会是什么? $m) > $v) echo “yes”; else echo “no”; ?> 答案: no 讲解:($l > $m)的结果是true,也就是1。1当然不比1大,所以结果为 no。 10、执行下面的代码$x会变成什么值呢? 答案: 0 讲解:'0xFF' == 255中会将 ’0xFF’ 当成16进制来换算,转成10进制数字,使用的是is_numeric_string ,结果0xFF =255 ,所以判断结果为真,继续执行(int)'0xFF'。但将0xFF转换成数字的时候,使用的是convert_to_long,所以是将0xFF当成字符串从左到右进行转换,遇到非数字则停止,所以转换结果是0。

posted on 2017-02-25 12:21  平淡日子里的刺  阅读(1565)  评论(0编辑  收藏  举报

导航