虽然文中列举的问题看似简单,但每一个都涵盖了一个或几个容易被忽视的基础知识点,希望对你平时的面试和工作有所帮助。
雌三醇环戊醚
第一个问题是关于弱类型的
$ str1=' yabadabadoo$ str2=' yabaif (strpos($str1,$str2)) { echo '/' '。$str1。/'包含/' '。$str2。/'';} else { echo' '。$str1。/'不包含/' '。$str2。/'';}正确操作的输出结果:
“yabadabadoo”不包含“yaba”
Strpos是返回字符串str2在str1中的位置。如果没有找到,则返回false。但是,其实这一次它返回的是0,0在IF语句中也被视为false,所以我们需要判断false的类型。正确的代码如下:
$ str1=' yabadabadoo$ str2=' yabaif (strpos($str1,$str2)!==false) { echo '/' '。$str1。/'包含/' '。$str2。/'';} else { echo' '。$str1。/'不包含/' '。$str2。/'';}需要注意的是,我们已经用过了!==,在php和JS中=!与==相比,要求数据类型一致更加严格。
Q2
下面的输出会是什么样子?
$ x=5;echo $ x;echo ' br/';echo $ x $ xecho ' br/';echo $ x;echo ' br/';echo $ x-$ x-;echo ' br/';echo $ x;实际运行结果是
511715关于$x和$ x这个问题其实非常容易遇到。我们只需要记住$ x在增加之前使用最新的值。
操作符的优先级明显高于操作符,所以先执行后执行。关于运算符的优先级,有时候我们真的可以用括号来让我们的程序更直观。毕竟代码不仅仅是用来执行的,有时候团队的可读性也是提高效率的一种方式。
Q3
变量引用;
$ a=' 1$ b=$ a;$ b=' 2 $ b甲和乙的价值是多少
有些人第一时间会想到$a='1' $b='21 '。仔细看$b=$a,其中$b是变量$a的引用,而不是直接赋值。
Q4
以下是对还是错
var _ dump(0123==123);var _ dump(' 0123 '==123);var _ dump(' 0123 '===123);var _ dump(0123==123);//false,PHP默认会把0123当作八进制,实际转换成十进制的时候是83,显然不相等。var _ dump(' 0123 '==123);//真在这里,php将‘0123’转换成数字,默认情况下去掉前面的0,也就是123==123 var _ dump(‘0123’==123),会非常有趣;//false显然,上面的问题已经说了,数字和字符串的类型不一致。Q5
以下代码有什么问题?输出会是什么以及如何修复它
$ reference table=array();$ reference table[' val 1 ']=array(1,2);$ reference table[' val 2 ']=3;$ reference table[' val 3 ']=array(4,5);$ TestArray=array();$ testArray=array _ merge($ testArray,$ reference table[' val 1 ']);var _ dump($ testArray);$ testArray=array _ merge($ testArray,$ reference table[' val 2 ']);var _ dump($ testArray);$ testArray=array _ merge($ testArray,$ reference table[' val 3 ']);var _ dump($ testArray);实际输出如下:
数组(2) {[0]=int (1) [1]=int (2)}当null运行时,您可能还会看到以下警告
警告: array_merge():参数#2不是数组
array_merge需要传入的参数都是数组。如果不是,将返回null。你可以这样修改它
$ testArray=array _ merge($ testArray,(array)$ reference table[' val 1 ']);var _ dump($ testArray);$ testArray=array _ merge($ testArray,(array)$ reference table[' val 2 ']);var _ dump($ testArray);$ testArray=array _ merge($ testArray,(array)$ reference table[' val 3 ']);var _ dump($ testArray);Q6
$x应该是什么输出?
$x=真和假;var _ dump($ x);有的同学可能第一次想到假的。其实这里还是强调运营商的优先级。=将高于和级别,因此它相当于下面的代码
$x=真;真假答案显而易见。
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=“John d”(在John后面将有5个连续的空格),strlen($text)将返回11
$text [10]="doe "只会在给字符串的特定位置赋予特定字符时,将d分配给$text。虽然$ text最初只有五个自负的长度,但php默认会填充空格。这与其他语言有些不同。
Q9
下面的输出是什么
$ v=1;$ m=2;$ l=3;if($ l $ m $ v){ echo ' yes ';} else { echo ' no}实际输出为“否”,只要仔细分析就不难得出
$l$m将被转换为1,然后在此时将其与$m进行比较。
Q10
执行以下代码$x的价值是什么?
$x=空;if('0xFF '==255){ $ x=(int)'0xFF ';}实际运行结果是$x=0,而不是255。
首先,‘oxFF’==255。我们很容易判断。我们将把十六进制数转换成十进制数,0xff-255。
PHP使用is_numeric_string来确定字符串是否包含十六进制数字,然后进行转换。
但是$ x=(int)“0xFF”;也会变成255吗?显然不是。convert_to_long实际上用于转换字符串。它实际上将字符串从左向右转换,遇到非数字字符时停止。因此,0xFF至x停止。所以$x=0
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。