Warum brauchen wir function_exists?

Lesezeit: 3 Minuten

Benutzer-Avatar
Irfan

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

if( !function_exists( 'bia_register_menu' ) ) {
    function bia_register_menu() {
        register_nav_menu('primary-menu', __('Primary Menu'));
    }
    add_action('init', 'bia_register_menu');
}

Vielen Dank

  • 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

Benutzer-Avatar
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:

URL: http://mysite.com/my/page/

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

1251450cookie-checkWarum brauchen wir function_exists?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy