Lohnt es sich zu überprüfen, ob class_exist bei der Entwicklung eines Plugins vorhanden ist und wie es geht?

8

Ich lerne die Entwicklung von WordPress-Plugins mit dem OOP-Ansatz. In den meisten Ressourcen wird vor dem Deklarieren einer Klasse normalerweise geprüft, ob eine Klasse vorhanden ist class_exists().

Ist es ein guter Ansatz, dies zu überprüfen, oder kann es weggelassen werden?

Außerdem habe ich mich gefragt, ob es ein guter Ansatz ist, in einem Block zu überprüfen, ob keine der Plugin-Klassen vorhanden ist. Selbst wenn bereits eine Klasse vorhanden ist, kann das gesamte Plugin nicht ordnungsgemäß funktionieren, da eine Klasse nicht erneut deklariert werden kann. Anstatt class_exists()den Code durchzuarbeiten, habe ich mich gefragt, ob es besser ist, ihn in einem Block zu haben, wenn ich ein Plugin aktiviere, so etwas wie:

if ( class_exists( 'Class_Name_One' )
|| class_exists( 'Class_Name_Two' )
|| class_exists( 'Class_Name_Three' )
|| class_exists( 'Class_Name_Four' ) ) {

    exit;

}}

Jeder Rat und jedes Feedback wird sehr geschätzt.

BEARBEITEN Wenn es einen Konflikt mit einem anderen Plugin gibt, das dieselben Klassennamen deklariert, möchte ich mein Plugin deaktivieren und den Administratorhinweis anzeigen.

Dashaluna
quelle

Antworten:

5

Verwenden Sie einen Auto-Loader und lassen Sie PHP das Problem für Sie lösen. Dann wird nur eine Klasse geladen, und Sie müssen sich keine Gedanken über doppelte Deklarationen machen.

Beispiel

Ich habe ein (unvollendetes) Plugin Post Notes mit folgender Dateistruktur:

- plugin.php
- php/
   - Nonce_Validator.php
   - Save_Post_Request_Validator.php
   - Textarea.php
   -  and more

Dies ist ein sehr einfaches Plugin, daher verwenden alle Dateien denselben Namespace Wpkrauts. In plugin.phpregistriere ich eine einfache Routine zum automatischen Laden:

spl_autoload_register( function( $name ) {

    $name = ltrim( $name, '\\' );

    if ( 'Wpkrauts' !== strtok( $name, '\\' ) )
        return;

    $file = strtok( '.' );

    $path = __DIR__ . "/php/$file.php";

    if ( file_exists( $path ) )
        require $path;
});

// Now start.
is_admin() && new Post_Notes( 'wpkrauts_post_notes' );

Sie können dasselbe tun, ohne Namespaces zu verwenden (nicht empfohlen, außer wenn Sie unsichere PHP-Versionen wie 5.2 unterstützen müssen).

In PHP 5.2 kann die SPL-Bibliothek deaktiviert werden, aber das war in den mir bekannten Plugins nie ein Problem. Unser Unternehmen vertreibt Plugins wie BackWPup mit mehr als einer Million Downloads, und es gab nie eine einzige Konformität darüber.

Fuxia
quelle