Heim  >  Artikel  >  Backend-Entwicklung  >  Bei PHP-Interviewfragen gibt es mehrere Fallstricke. Wandverkleidung

Bei PHP-Interviewfragen gibt es mehrere Fallstricke. Wandverkleidung

WBOY
WBOYOriginal
2016-08-08 09:21:41944Durchsuche

1.Problem mit dem hängenden Zeiger

$array = [1, 2, 3];

echo implode(',', $array), "n ";

foreach ($array as &$value) {} // by reference

echo implode(',', $array), "n";

foreach ($array as $value) {} // nach Wert (d. h. kopieren)

echo implode(',', $array), "n";

Die richtige Antwort sollte sei:

1,2,3

1,2,2

Erklärung:

Lass es uns analysieren. Nach der ersten Schleife ist $value eine Referenz auf das letzte Element im Array. Die zweite Schleife beginnt:

Schritt 1: Kopieren Sie $arr[0] nach $value ( Beachten Sie, dass $value ist ein Verweis auf $arr[2]), und das Array wird zu [1, 2,1]

Schritt 2: Kopieren Sie $arr[1] nach $value und dann das Array wird zu [1,2,2]

Schritt 3: Kopieren Sie $arr[2] nach $value , dann wird das Array zu [1,2,2]

2.Das folgende Ergebnis wird ausgegeben:

$test=null;

if(isset($test)){

echo "true";

}else{

echo "false";

}

?>

Richtige Antwort: false

Erklärung: Wenn die Variable für die Funktion isset() nicht existiert, wird false zurückgegeben und der Variablenwert ist null gibt auch false zurück.

Bestimmen Sie, ob eine Variable tatsächlich gesetzt ist (unterscheiden Sie zwischen nicht gesetzten und gesetzten Werten als null), array_key_exists() Funktion könnte besser sein.

3. Können die folgenden Ergebnisse gedruckt werden und warum?

class Config{

private $values ​​​​= [];

public function getValues() {

return $this->values;

}

}

$config = new Config();

$config->getValues()['test'] = 'test ';

echo $config->getValues()['test'];

Richtige Antwort:

Nein, weil in PHP In gibt PHP für das Array einen Wert zurück, der eine Kopie des Arrays ist, es sei denn, Sie geben explizit eine Rückgabereferenz an. Wenn der obige Code dem zurückgegebenen Array einen Wert zuweist, weist er daher tatsächlich dem kopierten Array und nicht dem ursprünglichen Array einen Wert zu. Wenn Sie den Code ändern in:

class Config{

private $values ​​​​= [];

// einen REFERENZ auf die tatsächlichen $values ​​zurückgeben Array

öffentliche Funktion &getValues() {

return $this->values;

}

}

$ config = new Config( );

$config->getValues()['test'] = 'test';

echo $config->getValues()['test' ];

Das ist es.

Wissenspunkte: PHP Bei Objekten erfolgt die Rückgabe standardmäßig per Referenz, und Arrays und integrierte Basistypen werden standardmäßig per Wert zurückgegeben. Dies sollte von anderen Sprachen unterschieden werden (viele Sprachen übergeben Arrays als Referenz).

4. Was gibt der Server aus, nachdem der folgende Code ausgeführt wurde?

$.ajax({

URL: 'http://my.site/ndex.php',

Methode: 'post',

data: JSON.stringify({a: 'a', b: 'b'}),

contentType: 'application/json'

});

var_dump($_POST);

Antwort: array(0){}

Erklärung: PHP analysiert nur Content-Type in application/x-www-form-urlencoded oder multipart/form-datas Http-Anfrage. Der Grund dafür ist historischer Natur. Als PHP ursprünglich $_POST implementierte, waren die beiden oben genannten Typen die beliebtesten. Obwohl einige Typen (z. B. application/json) mittlerweile sehr beliebt sind, ist die automatische Verarbeitung in PHP immer noch nicht implementiert. Da $_POST eine globale Variable ist, ist die Änderung von $_POST global wirksam. Daher müssen wir für Anfragen, bei denen Content-Type application/json ist, jsonDaten und ändern Sie dann die Variable $_POST.

$_POST = json_decode(file_get_contents('php://input'), true);

Dies erklärt, warum die Entwicklung der öffentlichen WeChat-Plattform diese Methode auch verwendet, um den WeChat-Server zu erhalten

post data

6. Das Ausgabeergebnis des folgenden Codes ist:

for ($c = 'a'; $c < ;= 'z'; $c++) {

echo $c . ...yz

Erklärung: Der Datentyp

char existiert nicht in

PHP

, nur String Typ. Verstehen Sie dies und führen Sie dann eine Inkrementierungsoperation für 'z' durch. Das Ergebnis ist 'aa'. Was den Vergleich der Saitengröße betrifft, sollten diejenigen, die C studiert haben, alle wissen, dass 'aa' kleiner ist als ' z'. Dies erklärt auch, warum es das obige Ausgabeergebnis gibt. Aber wenn in PHP zwei rein numerische Zeichenfolgen verglichen werden, versucht es zunächst, sie als Zahlen zu vergleichen.

Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden. Das Obige stellt mehrere Fallstricke vor, die bei PHP-Interviewfragen auftreten. Angesichts der Wand, einschließlich des Inhalts, hoffe ich, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn