Warum müssen wir function_exists auf benutzerdefinierte Funktionen überprüfen? Es sieht für interne oder zentrale PHP-Funktionen in Ordnung aus, aber wenn der Benutzer eine Funktion selbst kennt und definiert, warum muss er dann auf deren Existenz prüfen?
Unten ist eine benutzerdefinierte benutzerdefinierte Funktion
Denn wenn Sie versuchen, es zweimal zu definieren, erhalten Sie einen Fehler
– Markus Bäcker
29. Januar 2013 um 13:21 Uhr
@MarkBaker, das wäre die Antwort auf diese Frage, glaube ich
– eis
29. Januar 2013 um 13:25 Uhr
Um sicherzustellen, dass Sie dieselbe Funktion nicht zweimal registrieren, was zu einem Fehler führt.
Sie verwenden auch if(function_exists('function_name')) wenn Sie in Plugins definierte Funktionen aufrufen. Falls Sie Ihr Plugin deaktiviert haben, ist Ihre Website weiterhin funktionsfähig.
Wenn ich eine Funktion zweimal registriere (im selben Plugin oder Thema), würde ich das nicht tun wollen ein Fehler, um den offensichtlichen Konstruktionsfehler zu erkennen und zu beheben?
– Arild
3. Januar 2014 um 16:53 Uhr
Nein, WordPress ermöglicht es Ihnen, einige Funktionen zu überschreiben, zum Beispiel, wenn Sie ein untergeordnetes Thema erstellen (lesen Sie dies).
– RRikesh
4. Januar 2014 um 17:58 Uhr
In dynamisch geladenen Dateien, die Autoloader verwenden, wurde die Datei, die die Funktion oder Klasse enthält, möglicherweise nicht geladen, daher müssen Sie überprüfen, ob sie vorhanden ist
Arild
Diese Antwort auf dem WordPress StackExchange verdeutlicht, warum man das auch mal nutzen sollte if function_exists um eine Funktionsdeklaration in a Thema:
Der if function_exists-Ansatz ermöglicht es einem untergeordneten Design, die Funktionsdefinition zu überschreiben, indem es einfach die Funktion selbst definiert. Da die functions.php-Dateien des untergeordneten Designs zuerst geladen werden, definieren sie zuerst die Funktion und die Definition des übergeordneten Themas wird nicht geladen.
Ich nehme an, es ist analog zu dem protected Schlüsselwort in objektorientierten Sprachen.
Ich frage mich jedoch immer noch, ob es für Funktionsdeklarationen in notwendig wäre Plugins.
Stellen Sie sich vor, Sie verwenden Ihre URL, um den Funktionsnamen abzurufen und aufzurufen. Dann haben wir folgende Infos:
Wenn Sie diese URL in einen Funktionsnamen umwandeln, würden Sie etwa so vorgehen:
implode('_', $myUrlPart); //my_page
Die Ausgabe wäre “my_page” als String. Wenn Sie diese aber gleich aufrufen und die Funktion nicht existiert, wird ein Fehler angezeigt. Hier kommt die function_exists ins Spiel, schau mal:
if (function_exists($function_name)) {
$function_name(); //the function is called
} else {
//call other function to show HTTP 404 page or something like that
}
Wird es dadurch etwas klarer?
Da WordPress so schlecht konzipiert ist, hat es keinen geeigneten Mechanismus zum automatischen Laden solcher Module, also müssen Sie Sicherheitsvorkehrungen treffen.
nicht so sehr “schlecht designt” (obwohl es an manchen Stellen so ist), eher “ursprünglich für alte PHP-Versionen entworfen, die so etwas nicht automatisch tun konnten, und nie umgestaltet, um mit modernen Best Practices Schritt zu halten”.
– DEZA
29. Januar 2013 um 13:29 Uhr
nicht so sehr “schlecht designt” (obwohl es an manchen Stellen so ist), eher “ursprünglich für alte PHP-Versionen entworfen, die so etwas nicht automatisch tun konnten, und nie umgestaltet, um mit modernen Best Practices Schritt zu halten”.
– DEZA
29. Januar 2013 um 13:29 Uhr
12514500cookie-checkWarum brauchen wir function_exists?yes
Denn wenn Sie versuchen, es zweimal zu definieren, erhalten Sie einen Fehler
– Markus Bäcker
29. Januar 2013 um 13:21 Uhr
@MarkBaker, das wäre die Antwort auf diese Frage, glaube ich
– eis
29. Januar 2013 um 13:25 Uhr