2017-12-30 17 views
0

Ich verwende PHP 7.1.0Was bedeutet "eine leere Zeichenfolge zuweisen" in diesem Kontext?

ich verwirrend Text aus dem [Strings Kapitel PHP Manual] nach über kommen [1]

zu einem außerhalb des zulässigen Bereichs Pads Offset Schreiben Warnung die Zeichenfolge mit Leerzeichen. Nicht ganzzahlige Typen werden in Ganzzahlen konvertiert. Illegaler Offset-Typ gibt E_NOTICE aus. Nur das erste Zeichen einer zugewiesenen Zeichenfolge wird verwendet. Wie in PHP 7.1.0 wird durch das Zuweisen einer leeren Zeichenfolge ein schwerwiegender Fehler ausgelöst. Früher hat es ein NULL-Byte zugewiesen.

Ich habe versucht, hart, um die Bedeutung der Klauseln aus dem obigen Text

zu verstehen „Nur das erste Zeichen einer zugeordneten Zeichenfolge verwendet wird.“

und

"Ab PHP 7.1.0, eine leere Zeichenfolge zuweisen wirft einen fatalen Fehler. Früher es ein Null-Byte zugewiesen."

Ich verstehe überhaupt nicht die erste Aussage aus den beiden obigen Aussagen.

Für zweite Aussage habe ich versucht, es durch tatsächlichen Code zu verstehen. Also, dafür habe ich folgenden Code geschrieben, aber ich bin mir nicht sicher, ob dieser Code das zeigt, was die Aussage aus dem Handbuch sagen will. Folgendes ist mein Code-Snippet. Erkläre mir dann, ob ich die Aussage richtig verstanden habe und den Code richtig geschrieben habe oder nicht, um die Bedeutung der Aussage aus dem PHP-Handbuch zu demonstrieren. Wenn ich es falsch mache, korrigieren Sie bitte meinen Code entsprechend, um der Aussage aus dem PHP-Handbuch zu entsprechen.

Code Snippet:

<?php 
$rootbeer = 'A & W'; 
$rootbeer[] = 'N'; 
?> 

Ausgabe in PHP 7.1.0:

Fatal error: Uncaught Error: [] operator not supported for strings in hello.php:3 Stack trace: #0 {main} thrown in hello.php on line 3 

Ausgabe in PHP 5.6.30:

Fatal error: [] operator not supported for strings in hello.php on line 3 

Von den obigen zwei Ausgaben sehe ich nirgends in PHP 5.6.30, dass NULL Byte wird etwas zugeordnet. Wie bei den beiden Versionen bekomme ich fast die gleiche Ausgabe, gleicher Fehler.

Bitte zeigen den Unterschied zwischen den Ausgängen in PHP 7.1.0 und PHP 5.6.30. Es wäre also besser für mich, die Unterschiede zu verstehen.

Antwort

3

Sie weisen weder einen leeren String zu noch verwenden Sie einen Offset außerhalb des zulässigen Bereichs.Ich glaube, der Code, den Sie wie folgt aussieht versuchen wollen: in der Dokumentation erwähnt

<?php 
$rootbeer = 'A & W'; 
$rootbeer[7] = ''; 
echo $rootbeer; 

Diese Arbeit wird gut in PHP 5.6 und Ausgabe der gepolsterte Saite.

In PHP 7.1+, erhalten Sie eine Warnung erhalten

PHP Warnung: eine leere Zeichenfolge in einem String-Offset in yourfile.php auf Linie 3

und der String kann nicht nicht zuweisen Verändert werden.

+0

Ich kenne dieses Ding. In der Anleitung wurde deutlich erwähnt, dass> "ab PHP 7.1.0 die Zuweisung einer leeren Zeichenfolge einen schwerwiegenden Fehler verursacht. Aber in Ihrem Code gibt es nur eine Warnung. Ihr Code zeigt nicht, dass ein schwerwiegender Fehler generiert wird. – user2839497

+1

Das ist in der Tat ein Mysterium, ich habe mir die Quelle des [PHP-Interpreters] angesehen (https://github.com/php/php-src/) und diese Warnung wurde tatsächlich in Version 7.1 eingeführt, also vielleicht die Dokumentation stimmt einfach nicht mit der Implementierung überein? Es erscheint mir ein seltsamer Zufall, dass die Verhaltensänderung in der richtigen Version passiert ist, nicht so, wie sie beschrieben wird. – jsfan

+0

Vielen Dank für Ihre nahe Beobachtung. Würden Sie bitte die Aussage demonstrieren "Ab PHP 7.1 .0 führt das Anwenden des leeren Indexoperators auf eine Zeichenfolge zu einem schwerwiegenden Fehler. Früher wurde die Zeichenfolge still in ein Array umgewandelt. "Mit ein paar geeigneten cod Beispiel? Danke noch einmal. Ich warte auf Ihre Antwort. – user2839497

Verwandte Themen