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

时间:2020-12-29 05:32:25
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 19NULLWarning: array_merge(): Argument #1 is not an array in E:\www\ceshi.php on line 21NULL 讲解: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。