正确的代码如下

文章所列项支出的难题固然相近简单,然而种种背后都包含了一个或多少个我们轻便忽略的功底知识点,希望能够扶持到您的面试和常常工作。

图片 1

Q1

先是个难题有关弱类型

$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2)) {  
    echo "/"" . $str1 . "/" contains /"" . $str2 . "/"";
} else {
    echo "/"" . $str1 . "/" does not contain /"" . $str2 . "/"";
}

不可否认运营的输出结果:

"yabadabadoo" does not contain "yaba"

strpos是回来字符串str2在str1的岗位,未有找到则赶回false可是实际上这一次回去了0而在if语句中0也被充作false,所以我们须求对false做项目判断,正确的代码如下:

$str1 = 'yabadabadoo';
$str2 = 'yaba';
if (strpos($str1,$str2) !== false) {  
    echo "/"" . $str1 . "/" contains /"" . $str2 . "/"";
} else {
    echo "/"" . $str1 . "/" does not contain /"" . $str2 . "/"";
}

亟需注意的是大家选取了!==,在php 和 JS中= !相对==
更为严谨必要必要数据类型一致。

Q2

下边包车型客车输出结果会是怎么着?

$x = 5;
echo $x;  
echo "<br />";  
echo $x+++$x++;  
echo "<br />";  
echo $x;  
echo "<br />";  
echo $x---$x--;  
echo "<br />";  
echo $x;

实则运作结果是

5  
11  
7  
1  
5

至于 $x++ 和 $x–这些难点其实特别轻松遇见,大家只需记住$x++使用以来的值,然后才自增。

运算符的优先级,++ 是无人不晓不仅 +,由此先举办++ 再实行 +
。关于运算符的优先级,有的时候我们的确能够透过括号来让我们的次序更令人直观的问询,终归代码不光是用来实践的,不时只怕团队的可读性也是进步成效的一种。

Q3

关于变量的引用;

$a = '1';
$b = &$a;
$b = "2$b";

试问 $a 和 $b的值各位多少

有的第有的时候间会想到 $a=’1′
$b=’21′,稳重一看 $b=&$a,这里$b是变量$a的援引并不是一贯 赋值。

Q4

下面是true还是false

var_dump(0123 == 123);  
var_dump('0123' == 123);  
var_dump('0123' === 123);

var_dump(0123 == 123卡塔尔国;//
false,PHP会暗许把0123当作8进制来管理,实际转变为10进制正是83,显著那不是特出的。

var_dump(’0123′ == 123卡塔尔国;//
true这里php会特别风趣的将’0123′调换到贰个数字还要暗中认可去掉了前面包车型地铁0也正是123==123

var_dump(’0123′ === 123卡塔尔国;//
false很刚毅上边的难点早就说过了数字和字符串类型不均等。

Q5

上面包车型客车代码有何样难点啊?输出会是哪些,怎么着修复它

$referenceTable = array();
$referenceTable['val1'] = array(1, 2);
$referenceTable['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) }  
NULL  
NULL

运维的时候你也许还可以收看上面的警戒

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

array_merge要求传入的参数都以数组,假诺不是,则会回来null。
你能够那样改过

$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);

Q6

$x应该是出口什么?

$x = true and false;
var_dump($x);

有的同学只怕会第不时间想到false,实际上这里仍然是强调拨运输算符的优先级,=
会比 and品级高点,因而等同下边包车型客车代码

$x = true;
true and false

答案昭昭。

Q7

因此上边包车型客车演算 $x的值应该是有一些?

$x = 3 + "15%" + "$25"

答案是18,PHP是会基于上下文完结品类的机动调换

地点的代码大家能够那样领会,如若我们在与字符串实行数学生运动算,实际php会尽恐怕将字符串中的数组举办转移,假如是数字起初的话则转变到改数字比方”15%”会产生15,就算不是数字带头则会产生0;
上边的运算类似上面 :

$x = 3 + 15 + 0

Q8

运营上边包车型客车代码,$text 的值是不怎么?strlen($text卡塔尔(قطر‎又会回来什么结果?

$text = 'John ';
$text[10] = 'Doe';

地点代码施行完结后 $text = “JohnD”(John前边会有一而再的5个空格卡塔尔国 strlen($text卡塔尔(قطر‎会回到11

$text[10] =
“Doe”给有个别字符串具体的有些地点具体字符时候,实际只会把D赋给$text.
固然$text才起来唯有5个自负长度,不过php会默许填充空格。这和别的语言有一些差别。

Q9

上边包车型大巴输出结果会是哪些

$v = 1;
$m = 2;
$l = 3;

if( $l > $m > $v){  
    echo "yes";
}else{
    echo "no";
}

实质上的出口是”no”,只要留心剖析就轻易得出

$l>$m 会调换来1 ,则此时再和$m比较。

Q10

实践下边代码$x会化为何值吗?

$x = NULL;

if ('0xFF' == 255) {  
    $x = (int)'0xFF';
}

事实上的周转结果是$x=0并非255.

先是’oxFF’ ==
255我们好判定,会实行转移将16进制数字调换成10进制数字,0xff -> 255.

PHP使用is_numeric_string 判别字符串是不是带有十二进制数字然后举办转移。

而是$x =
(int卡塔尔(قطر‎’0xFF’;是或不是也会成为255啊?明显不是,将叁个字符串举办强迫类型转变实际上用的是convert_to_long,它实际是将字符串从左向右实行改换,遭受非数字字符则结束。由此0xFF到x就告一段落了。所以$x=0

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图