In der PHP -Entwicklung ist die Funktion is_a () eine Funktion, die üblicherweise verwendet wird, um festzustellen, ob ein Objekt zu einer bestimmten Klasse oder einer Unterklasse dieser Klasse gehört. Die grundlegende Nutzung ist wie folgt:
is_a(object $object, string $class_name, bool $allow_string = false): bool
Bei Verwendung der Funktion is_a () stoßen Entwickler jedoch häufig auf eine Problemempfindlichkeit. In diesem Artikel werden die fallempfindlichen Merkmale der Funktion is_a () ausführlich erörtert und wie durch Fallunterschiede verursachte Fehler vermieden werden.
In PHP sind die Klassennamen standardmäßig unempfindlich. Definieren Sie beispielsweise einen Klassennamen Myclass , auf den Sie sich mit Myclass oder Myclass beziehen können, und normalerweise werden Sie keinen Fehler erhalten:
class MyClass {}
$obj = new MyClass();
var_dump($obj instanceof myclass); // Ausgabe:bool(true)
Wenn jedoch die Funktion is_a () den zweiten Parameter $ class_name übernimmt, ist sie sensibel . Wenn der Fall des übergebenen Klassennamens nicht mit dem tatsächlichen Klassennamen übereinstimmt, gibt IS_A () false zurück, was zum Urteilsfehler führt.
Beispiel:
class MyClass {}
$obj = new MyClass();
var_dump(is_a($obj, 'MyClass')); // Ausgabe:bool(true)
var_dump(is_a($obj, 'myclass')); // Ausgabe:bool(false)
Dies unterscheidet sich von der Leistung des Schlüsselworts des Instanzes und ist anfällig für Missverständnisse und Fehler.
Der zweite Parameter der Funktion is_a () ist eine Zeichenfolge. PHP vergleicht die Zeichenfolgen anstelle einer unempfindlichen Verarbeitung von Klassennamen wie Instanz direkt. Daher wird die Falldifferenz der Zeichenfolge scheitern.
Das Schlüsselwort des Instanzes ist bei der Beurteilung von Objekttypen von Fall unempfindlich. Es wird empfohlen, zu verwenden:
if ($obj instanceof MyClass) {
// Codelogik
}
Wenn Sie nicht dynamisch in Klassennamen weitergeben müssen, versuchen Sie, Instanz zu verwenden.
Wenn Sie IS_A () verwenden müssen und der Klassenname eine dynamisch übergebene Zeichenfolge ist, können Sie den Klassennamen in den richtigen Ober- und Kleinbuchstaben konvertieren und dann mit dem Zielklassennamen in Kleinbuchstaben umwandeln.
Beispiel:
class MyClass {}
$obj = new MyClass();
$className = 'myclass';
// Plan 1:Umwandeln, um den Fall zu korrigieren(Es ist eine Unterrichtsname -Zuordnung erforderlich)
$correctClassName = 'MyClass';
var_dump(is_a($obj, $correctClassName)); // bool(true)
// Plan 2:Nicht direkt verwendetis_a,Es ist ein individuelles Urteil
function is_a_case_insensitive($obj, $className) {
return is_subclass_of($obj, $className, true) ||
(strcasecmp(get_class($obj), $className) === 0);
}
var_dump(is_a_case_insensitive($obj, $className)); // bool(true)
PHP 5.3.0 führt den dritten Parameter $ DELTRING von is_a () ein, damit der erste Parameter eine Klassenname-Zeichenfolge ist, aber das Fall-sensitive Problem besteht immer noch. Achten Sie auf die Nutzungsszenarien dieses Parameters.
Der zweite Parameter der Funktion is_a () ist Fallempfindlichkeit und kann zu Urteilsfehlern führen.
Es wird empfohlen, das Schlüsselwort des Instanzes anstelle von IS_A () zu verwenden, da es nicht unterempfindlich ist.
Wenn Sie IS_A () verwenden müssen, stellen Sie sicher, dass der Klassenname uneinheitlich ist, oder implementieren Sie eine fallunabhängige Urteilsfunktion.
Das Verständnis des internen Fallbearbeitungsmechanismus von PHP wird dazu beitragen, solche detaillierten Fehler zu vermeiden und die Code -Robustheit zu verbessern.
Wenn Sie mehr über Fähigkeiten zum Betrieb von PHP -Objekten erfahren möchten, können Sie besuchen: