✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Швидке створення прототипів: представлення автозавантаження

15

Протягом кількох останніх публікацій я ознайомився з процесом переходу ідеї від концепції до прототипу.

Звичайно, є деякі речі, які ви можете змінити (і є деякі речі, які я б змінив щодо організації занять). Але суть цієї серії не полягає в тому, щоб пройти через усі різноманітні об’єктно-орієнтовані техніки, які можна використовувати для створення рішення.

Натомість йдеться про те, щоб взяти прототип і перетворити його на щось трохи більш професійне. Але ще є одна річ, яку ми повинні зробити.

Наразі ми включаємо всі наші файли за допомогою операторів вимоги. І це добре працює для невеликих файлів, але запровадження автозавантаження в поєднанні з просторами імен може зробити програму ще чистішою.

І це те, що ми збираємося зробити.

Представляємо автозавантаження

Згадайте з попередньої публікації (якщо ви її читали), що автозавантаження — це проста ідея:

Звучить чудово, правда? Але є застереження: вам потрібно написати автозавантажувач. PHP не може розібратися сам.

І ось чому я прихильник того, щоб наші простори імен також дотримувалися узгодженої структури каталогів: якщо ви аналізуєте простір імен і ім’я файлу, відносно легко побудувати шлях до файлу та автоматично завантажити його.

Звучить заплутано? По-перше, давайте подивимося, де ми розмістимо автозавантажувач стосовно нашої структури каталогів:

Далі оновіть файл початкового завантаження плагіна, щоб він вимагав лише файл автозавантаження.

<?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();
}

Звичайно, нам потрібен автозавантажувач для завантаження наших файлів. По суті, це працює так:

  1. розділити компоненти імені вхідного файлу (наприклад, шлях до каталогу та ім’я файлу),
  2. замініть будь-які підкреслення дефісами, щоб переконатися, що файл відповідає структурі назви файлу класу,
  3. почніть створення повного імені шляху (яким є каталог, ім’я файлу тощо),
  4. перебирати простір імен до імені класу та створювати повне ім’я для файлу,
  5. включити його в проект.

Це прямолінійно, чи не так? Якщо ви дотримуєтеся узгодженого простору імен, каталогу, назви класу та схеми іменування файлів, ви можете повторно використовувати той самий автозавантажувач у будь-яких проектах.

Ось копія автозавантажувача, який я використовую, і додаю його майже до будь-якого проекту, який я використовую. Ви побачите, що він точно відповідає тому, що розглянуто вище:

<?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 );
    }
});

Таким чином, плагін завершується до версії 1.0.0. Ви можете перевірити це на GitHub (як буквально, так і просто для огляду). І, сподіваюся, це допомогло пройти через процес переходу від швидкого прототипування до концепції в рамках концепції WordPress.

Повідомлення серії

  1. Швидке створення прототипів за допомогою WordPress: від концепції до плагіна
  2. Швидке створення прототипів за допомогою WordPress: аналіз концепції
  3. Швидке створення прототипів: прототип до коду, частина 1
  4. Швидке створення прототипів: прототип до коду, частина 2
  5. Швидке створення прототипів: представлення автозавантаження

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі