Maison >développement back-end >tutoriel php >10 questions d'entretien sur PHP

10 questions d'entretien sur PHP

不言
不言original
2018-04-10 10:43:401502parcourir

Cet article partage avec vous le contenu de 10 questions d'entretien sur PHP. Les amis dans le besoin peuvent s'y référer


Q1


La première question concerne 弱类型

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

Résultat de sortie du bon fonctionnement :

  1. <span class="str">"yabadabadoo"</span><span class="pln"> does </span><span class="kwd">not</span><span class="pln"> contain </span><span class="str">"yaba"</span>

strpos renvoie la chaîne str2 à la position de str1 Si elle n'est pas trouvée, elle renvoie false. cette fois, 0 est renvoyé et 0 est également traité comme faux dans l'instruction if, nous devons donc faire un jugement de type sur false. Le code correct est le suivant :

  1. $str1 =&#39;yabadabadoo&#39;;
    $str2 =&#39;yaba&#39;;
    if(strpos($str1,$str2)!==false){
    echo"\"". $str1 ."\" contains \"". $str2 ."\"";
    }else{
    echo"\"". $str1 ."\" does not contain \"". $str2 ."\"";
    }
    <.>
Il est à noter que nous utilisons

En PHP et JS, !== est plus strict que = ! et nécessite des types de données cohérents. ==

Q2

Quel sera le résultat ci-dessous ?

  1. $x =5;
    echo $x;
    echo"<br />";
    echo $x+++$x++;
    echo"<br />";
    echo $x;
    echo"<br />";
    echo $x---$x--;
    echo"<br />";
    echo $x;
Le résultat réel en cours d'exécution est

  1. <span class="lit">5</span>

  2. <span class="lit">11</span>

  3. <span class="lit">7</span>

  4. <span class="lit">1</span>

  5. <span class="lit">5</span>

Concernant

et $x++, ce problème est en fait très facile à rencontrer. Il suffit de rappeler que $x-- utilise la dernière valeur puis l'incrémente. La priorité de l'opérateur $x++

,

est nettement supérieure à ++, donc ++ est exécuté en premier, puis + . Concernant la priorité des opérateurs, nous pouvons parfois vraiment utiliser des parenthèses pour rendre notre programme plus intuitif à comprendre. Après tout, le code n'est pas seulement utilisé pour l'exécution. Parfois, la lisibilité de l'équipe peut également améliorer l'efficacité. +

Q3

À propos des références de variables

  1. $a =&#39;1&#39;;
    $b =&$a;
    $b ="2$b";
Pourriez-vous s'il vous plaît me dire les valeurs de

et $a Pour la partie $b

, la première chose qui me vient à l'esprit est

Regardez de plus près $a='1' $b='21' Ici, $b=&$a est une référence à la variable $b. plutôt qu'une affectation directe. $a

Q4

下面是true还是false

var_dump(0123==123);
var_dump(&#39;0123&#39;==123);
var_dump(&#39;0123&#39;===123);
var_dump(0123 == 123);// false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。
var_dump(&#39;0123&#39; == 123);// true这里php会非常有趣的将&#39;0123&#39;转换成一个数字而且默认去掉了前面的0也就是123==123
var_dump(&#39;0123&#39; === 123);// false很显然上面的问题已经说过了数字和字符串类型不一致。

Q5

下面的代码有什么问题吗?输出会是什么,怎样修复它

  1. $referenceTable =array();
    $referenceTable[&#39;val1&#39;]=array(1,2);
    $referenceTable[&#39;val2&#39;]=3;
    $referenceTable[&#39;val3&#39;]=array(4,5);
    $testArray =array();
    $testArray = array_merge($testArray, $referenceTable[&#39;val1&#39;]);
    var_dump($testArray);
    $testArray = array_merge($testArray, $referenceTable[&#39;val2&#39;]);
    var_dump($testArray);
    $testArray = array_merge($testArray, $referenceTable[&#39;val3&#39;]);
    var_dump($testArray);

实际输出如下:

  1. array(2){[0]=>int(<span class="lit">1</span>)[<span class="lit">1</span>]=>int(2)}

  2. <span class="pln">NULL</span>

  3. <span class="pln">NULL</span>

运行的时候你或许还能看到下面的警告

  1. <span class="typ">Warning</span><span class="pun">:</span><span class="pln"> array_merge</span><span class="pun">():</span><span class="typ">Argument</span><span class="com">#</span><span class="lit">2</span><span class="kwd">is</span><span class="kwd">not</span><span class="pln"> an </span><span class="kwd">array</span>

  2. Warning: array_merge():Argument#<span class="lit">1</span>isnot an array

array_merge需要传入的参数都是数组,如果不是,则会返回null。 你可以这样修改

  1. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">'val1'</span><span class="pun">]);</span>

  2. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

  3. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">'val2'</span><span class="pun">]);</span>

  4. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

  5. <span class="pln">$testArray </span><span class="pun">=</span><span class="pln"> array_merge</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">,</span><span class="pun">(</span><span class="kwd">array</span><span class="pun">)</span><span class="pln">$referenceTable</span><span class="pun">[</span><span class="str">'val3'</span><span class="pun">]);</span>

  6. <span class="pln">var_dump</span><span class="pun">(</span><span class="pln">$testArray</span><span class="pun">);</span>

Q6

$x应该是输出什么?

  1. $x =trueandfalse;
    var_dump($x);

部分同学或许会第一时间想到false,实际上这里依旧是强调运算符的优先级,= 会比 and级别高点,因此等同下面的代码

  1. <span class="pln">$x </span><span class="pun">=</span><span class="kwd">true</span><span class="pun">;</span>

  2. <span class="kwd">true</span><span class="kwd">and</span><span class="kwd">false</span>

答案显而易见。

Q7

经过下面的运算 $x的值应该是多少?

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

答案是18,PHP是会根据上下文实现类型的自动转换

上面的代码我们可以这样理解,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,如果是数字开头的话则转换成改数字比如"15%"会变成15,如果不是数字开头则会变成0; 上面的运算类似下面 :

  1. <span class="pln">$x </span><span class="pun">=</span><span class="lit">3</span><span class="pun">+</span><span class="lit">15</span><span class="pun">+</span><span class="lit">0</span>

Q8

运行下面的代码,$text 的值是多少?strlen($text)又会返回什么结果?

  1. $text =&#39;John &#39;;
    $text[10]=&#39;Doe&#39;;

上面代码执行完毕后 $text = "John D"(John后面会有连续的5个空格) strlen($text)会返回11

$text[10] = "Doe"给某个字符串具体的某个位置具体字符时候,实际只会把D赋给$text. 虽然$text才开始只有5个自负长度,但是php会默认填充空格。这和别的语言有些差别。

Q9

下面的输出结果会是什么

  1. $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(&#39;0xFF&#39;==255){
$x =(int)&#39;0xFF&#39;;
}
  1. 实际的运行结果是

  2. $x=0
  3. 而不是255.


首先'oxFF' == 255我们好判断,会进行转换将16进制数字转换成10进制数字,0xff -> 255.

PHP使用is_numeric_string 判断字符串是否包含十六进制数字然后进行转换。

但是$x = (int)'0xFF';是否也会变成255呢?显然不是,将一个字符串进行强制类型转换实际上用的是convert_to_long,它实际上是将字符串从左向右进行转换,遇到非数字字符则停止。因此0xFF到x就停止了。所以$x=0

相关推荐:

php面试必问的面试问题

php面试题总结分享

PHP面试题目整理分享

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn