✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Rapid Prototyping: Einführung in das automatische Laden

26

In den letzten Beiträgen bin ich durch den Prozess gegangen, eine Idee vom Konzept zum Prototyp zu bringen.

Zugegeben, es gibt einige Dinge, die Sie ändern könnten (und es gibt einige Dinge, die ich in Bezug auf die Organisation des Unterrichts ändern würde). Aber der Sinn dieser Serie besteht nicht darin, all die verschiedenen objektorientierten Techniken durchzugehen, die verwendet werden können, um eine Lösung zu schaffen.

Stattdessen geht es darum, einen Prototypen zu nehmen und ihn in etwas Professionelleres umzuwandeln. Es gibt jedoch noch eine Sache, die wir tun müssen.

Im Moment binden wir alle unsere Dateien über require-Anweisungen ein. Und das funktioniert gut für kleine Dateien, aber die Einführung des automatischen Ladens in Verbindung mit Namespaces kann die Anwendung noch sauberer machen.

Und das werden wir tun.

Einführung in das automatische Laden

Erinnern Sie sich an einen früheren Beitrag (falls Sie ihn gelesen haben), dass das automatische Laden eine einfache Idee ist:

Es klingt großartig, oder? Aber es gibt eine Einschränkung: Sie müssen den Autoloader schreiben. PHP kann es nicht alleine herausfinden.

Und deshalb bin ich ein Fan davon, dass unsere Namensräume auch einer konsistenten Verzeichnisstruktur folgen: Wenn Sie den Namensraum und den Namen der Datei parsen, ist es relativ einfach, den Pfad zur Datei zu erstellen und automatisch zu laden.

Klingt verwirrend? Schauen wir uns zunächst an, wo wir den Autoloader in Bezug auf unsere Verzeichnisstruktur platzieren:

Aktualisieren Sie als Nächstes die Bootstrap-Datei Ihres Plugins, sodass sie nur die Autoloader-Datei benötigt.

<?php
/**
 * Three Recent Posts
 *
 * @package     TRP
 * @author      Tom McFarlin
 * @copyright   2017 Tom McFarlin
 * @license     MIT
 *
 * @wordpress-plugin
 * Plugin Name: Three Recent Posts
 * Plugin URI:  https://tommcfarlin.com/three-recent-posts/
 * Description: Displays the three mot recent posts in your post editor screen.
 * Version:     1.0.0
 * Author:      Tom McFarlin
 * Author URI:  https://tommcfarlin.com
 * Text Domain: three-recent-posts
 * License:     GPL
 * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
 */

namespace McFarlinTRP;
use McFarlinTRPDisplayMeta_Box;

// Import the autoloader.
include_once 'Includes/autoload.php';

add_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );
/**
 * Starts the plugin.
 */
function trp_start() {

    $meta_box = new Meta_Box( dirname( __FILE__) );
    $meta_box->init();
}

Natürlich brauchen wir den Autoloader, um unsere Dateien zu laden. Im Wesentlichen funktioniert es so:

  1. Trennen Sie die Komponenten des eingehenden Dateinamens (wie den Verzeichnispfad und den Dateinamen),
  2. Ersetzen Sie alle Unterstriche durch Bindestriche, um sicherzustellen, dass die Datei der Struktur des Dateinamens der Klasse folgt.
  3. Beginnen Sie mit dem Erstellen des vollständig qualifizierten Pfadnamens (der das Verzeichnis, der Dateiname usw. ist).
  4. Durchlaufen Sie den Namensraum bis zum Klassennamen und erstellen Sie einen vollständig qualifizierten Namen für die Datei.
  5. in das Projekt einbinden.

Es ist einfach, nicht wahr? Wenn Sie einem einheitlichen Namespace-, Verzeichnis-, Klassennamen- und Dateibenennungsschema folgen, können Sie denselben Autoloader in allen Projekten wiederverwenden.

Hier ist eine Kopie eines Autoloaders, den ich verwende und in fast jedes Projekt, das ich verwende, einfügen kann. Sie werden sehen, dass genau das folgt, was oben behandelt wurde:

<?php
/**
 * Automatically loads the specified file.
 *
 * @package McFarlinTFP
 */

namespace McFarlinTFP;

/**
 * Automatically loads the specified file.
 *
 * Examines the fully qualified class name, separates it into components, then creates
 * a string that represents where the file is loaded on disk.
 *
 * @package McFarlinTFP;
 */
spl_autoload_register(function( $filename) {

    // First, separate the components of the incoming file.
    $file_path = explode( '', $filename );

    // Get the last index of the array. This is the class we're loading.
    if (isset( $file_path[ count( $file_path) - 1 ])) {

        $class_file = strtolower(
            $file_path[ count( $file_path) - 1 ]
        );

        /**
         * The classname has an underscore, so we need to replace it
         * with a hyphen for the file name.
         */
        $class_file = str_ireplace( '_', '-', $class_file );
        $class_file = "class-$class_file.php";
    }

    /**
     * Find the fully qualified path to the class file by iterating through the $file_path array.
     * We ignore the first index since it's always the top-level package. The last index is always
     * the file so we append that at the end.
     */
    $fully_qualified_path = trailingslashit(
        dirname(
            dirname( __FILE__)) );

    /**
     * We start at the second index of the namespace because our directory
     * structure does not include 'McFarlin/TRP'.
     */
    for ($i = 2; $i < count( $file_path) - 1; $i++) {

        $dir = strtolower( $file_path[ $i ] );
        $fully_qualified_path .= trailingslashit( $dir );
    }
    $fully_qualified_path .= $class_file;

    // Now we include the file.
    if (file_exists( $fully_qualified_path)) {
        include_once( $fully_qualified_path );
    }
});

Und damit ist das Plugin auf Version 1.0.0 gepackt. Sie können es sich auf GitHub ansehen (sowohl buchstäblich als auch nur zur Überprüfung). Und hoffentlich hat dies dazu beigetragen, den Prozess des Übergangs vom Rapid Prototyping zum Konzept innerhalb des Konzepts von WordPress zu durchlaufen.

Serienbeiträge

  1. Rapid Prototyping mit WordPress: Vom Konzept zum Plugin
  2. Rapid Prototyping mit WordPress: Konzeptanalyse
  3. Rapid Prototyping: Vom Prototyp zum Code, Teil 1
  4. Rapid Prototyping: Vom Prototyp zum Code, Teil 2
  5. Rapid Prototyping: Einführung in das automatische Laden

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen