Aktueller Standort: Startseite> Neueste Artikel> Was passiert bei der Verwendung von Nichtstrings oder Ganzzahlen als Schlüsselnamen?

Was passiert bei der Verwendung von Nichtstrings oder Ganzzahlen als Schlüsselnamen?

M66 2025-05-14

In PHP ist der Typ des Arrayschlüsselnamens sehr wichtig. Normalerweise verwenden wir Ganzzahlen oder Zeichenfolgen als Schlüsselnamen für Arrays. Wenn wir jedoch andere Wertearten als Schlüsselnamen verwenden, kann dies zu unerwarteten Ergebnissen führen. In diesem Artikel werden potenzielle Probleme erörtert, die auftreten können, wenn sie Nicht-STRING oder Ganzzahlen als Array-Schlüsselnamen in PHP verwenden und wie sie mit ihnen umgehen können.

1. Die Schlüsselnamen von Nichtstrings und Ganzzahlen werden konvertiert

PHP hat bestimmte Spezifikationen für Arrayschlüsselnamen. Jeder Datentyp, der kein Zeichenfolge oder eine Ganzzahl ist, wird automatisch in eine Zeichenfolge konvertiert, wenn sie als Schlüsselname verwendet wird. PHP versucht, Schlüsselnamen in Zeichenfolgentypen umzuwandeln. Wenn es sich um einen komplexen Datentyp wie Objekte, Arrays usw. handelt, verwendet PHP seine spezifischen Conversion -Regeln.

Wenn wir beispielsweise eine schwimmende Punktnummer als Schlüsselname eines Arrays verwenden, konvertiert PHP sie automatisch in eine Zeichenfolge:

 <?php
$array = array();
$array[1.5] = "value";
echo $array["1.5"];  // Ausgabe "value"
?>

Obwohl wir im obigen Code die schwimmende Nummer 1.5 als Schlüsselname verwendet haben, wird er automatisch in die Zeichenfolge "1.5" konvertiert und im Array erfolgreich gespeichert. Wenn Sie die Zeichenfolge "1.5" während des Zugriffs verwenden, kann der entsprechende Wert weiterhin korrekt gefunden werden.

2. Verwenden Sie ein Objekt oder ein Array als Schlüsselname

Wenn wir versuchen, ein Objekt oder ein Array als Schlüsselnamen des Arrays zu verwenden, meldet PHP einen Fehler oder konvertiert sie in eine Zeichenfolge. Spezifische Verhaltensweisen variieren je nach Implementierung von Objekten oder Arrays.

Objekt als Arrayschlüsselname

Wenn wir ein Objekt als Schlüsselname eines Arrays verwenden, ruft PHP die __toString () -Methode des Objekts auf (falls die Methode vorhanden) und verwendet den Rückgabewert der Methode als Schlüsselname des Arrays. Wenn die __toString () -Methode nicht definiert ist, wirft PHP einen Fehler auf.

 <?php
class MyClass {
    public function __toString() {
        return "my_object";
    }
}

$obj = new MyClass();
$array = array();
$array[$obj] = "value";
echo $array["my_object"];  // Ausgabe "value"
?>

Wenn die __toString () -Methode nicht definiert ist, wirft PHP den folgenden Fehler aus:

 Catchable fatal error: Object of class MyClass could not be converted to string

Array als Arrayschlüsselname

Wenn wir ein Array direkt als Schlüsselname des Arrays verwenden, versucht PHP, es in eine Zeichenfolge umzuwandeln, und das Ergebnis ist eine leere Zeichenfolge ( "" ). Diese Konvertierung führt normalerweise zu Schlüsselwertkonflikten in Arrays, insbesondere wenn wir mehrere Arrays als Schlüssel haben. Alle Schlüssel werden zur gleichen leeren Zeichenfolge.

 <?php
$array = array();
$array[array(1, 2)] = "value";
var_dump($array);  // Fehler,Der Schlüsselname wird in eine leere Zeichenfolge konvertiert
?>

Ausgangsergebnis:

 array(1) {
  [""]=> string(5) "value"
}

3. Zusammenfassung

In PHP müssen Arrayschlüsselnamen Ganzzahlen oder Zeichenfolgen sein, und andere Datentypen werden automatisch in Zeichenfolgen konvertiert. Dies kann jedoch zu unerwarteten Ergebnissen führen, wie z. B. Array -Schlüsselkonflikte oder unvorhersehbares Verhalten.

  • Ganzzahlen und Saiten : PHP behandelt Ganzzahlen und Saiten korrekt als Arrayschlüsselnamen.

  • Schwimmpunktnummer : Gleitnummern werden automatisch in Zeichenfolgen konvertiert (z. B. "1,5" ).

  • Objekt : Objekte werden in Zeichenfolgen umgewandelt, die durch die __toString () -Methode bestimmt werden.

  • Array : Das Array wird in eine leere Zeichenfolge umgewandelt.

Während der Entwicklung ist es am besten, Nicht-Setze oder Nicht-Integrale als Arrayschlüsselnamen zu vermeiden, um unvorhersehbare Probleme zu vermeiden. Wenn Sie andere Typen als Schlüsselnamen verwenden müssen, können Sie vor der Verwendung oder Implementierung der geeigneten Konvertierungslogik in Betracht ziehen.