值得深思的PHP面试题

Q1:弱类型

$str1='itisagoodday';
$str2='itis';
if(strpos($str1, $str2)){
    echo "\"".$str1."\"contians\"".$str2."\"";
}else {
    echo "\"".$str1."\"dose not contain\"".$str2."\"";
}

运行结果:”itisagoodday”dose not contain”itis”
strpos是返回字符串 str2  str1中的位置,没有找到则返回false,实际则是运行结果返回了0,而在if语句中0也被当作false,所以我们需要对false做类型判断。
代码如下:

$str1='itisagoodday';
$str2='itis';
if(strpos($str1, $str2)!==false){
    echo "\"".$str1."\"contians\"".$str2."\"";
}else {
    echo "\"".$str1."\"dose not contain\"".$str2."\"";
}
echo "<hr>";

注:我们使用了!==,在php和js中=!相对==更为严格要求数据类型一致。
Q2:

$x=5;
$y=2;

echo $x+++$x;   //11
echo "<br>";    
echo $x;        //6
echo "<br>";    
echo $x+(++$y);  //9
echo "<br>";
echo $x;         //6
echo "<br>";
echo $y;         //3
echo "<br>"; 
echo $x+++$y++;   //9
echo "<br>";
echo $x;          //7
echo "<br>";
echo $y;          //4
echo "<br>";
echo $x---$y--;   //3
echo "<br>";
echo $x;          //6
 关于$x++和$x--,经常遇见,我们只需记住$x++使用最近的值,然后自增。

Q3:变量的引用

$a='1';
$b=&$a;     
$b="2$a";         
echo $a;          //21
echo "<br>";      
echo $b;          //21
echo "<br>";      
$b="2$b";         
echo $a;          //221
echo "<br>";      
echo $b;          //221
刚看到可能会想到$a=1,$b=21,仔细分析会发现$b=&$a,这里$b是变量$a的引用而不是直接赋值

Q4:下面是true还是false

var_dump(0123==123);       //bool(false) 
echo "<br>";    
var_dump('0123'==123);     //bool(true) 
echo "<br>";
var_dump('0123'===123);    //bool(false) 
echo "<hr>";

第一条,PHP会默认将0123当作8进制进行处理,实际转化为10进制就是83,当然不相等
第二条,这里PHP非常有趣的将‘0123’转化成一个数字而且默认去掉了前面的0即123==123
第三条,数字和字符串类型不相同
Q5:下面的代码会输出什么呢

echo "<pre>";
$rt=array();
$rt['val1']=array(1,2);
$rt['val2']=3;
$rt['val3']=array(4,5);
$ta=array();

$ta=array_merge($ta,$rt['val1']);
print_r($ta);
$ta=array_merge($ta,$rt['val2']);
print_r($ta);
$ta=array_merge($ta,$rt['val3']);
print_r($ta);

实际输出:

Array
(
    [0] => 1
    [1] => 2
)
null
null

运行的时候可能会看到下面的警告:

Warning:  array_merge(): Argument #2 is not an array in ...


Warning:  array_merge(): Argument #1 is not an array in ...

array_merge()需要传入的参数都是数组,如果不是,则返回null,并且报警告错误。
可以修改如下:

echo "<pre>";
$rt=array();
$rt['val1']=array(1,2);
$rt['val2']=3;
$rt['val3']=array(4,5);
$ta=array();
$ta=array_merge($ta,(array)$rt['val1']);
print_r($ta);
$ta=array_merge($ta,(array)$rt['val2']);
print_r($ta);
$ta=array_merge($ta,(array)$rt['val3']);
print_r($ta);
echo "<hr>";

输出结果如下:

Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值