Viimaste postituste jooksul olen läbinud protsessi, kuidas idee kontseptsioonist prototüübini jõuda.
Tõsi, on asju, mida võiksite muuta (ja on asju, mida ma muudaksin seoses tundide korraldamisega). Kuid sarja mõte ei ole läbi käia kõik erinevad objektorienteeritud tehnikad, mida saab lahenduse loomiseks kasutada.
Selle asemel on vaja võtta prototüüp ja muuta see millekski veidi professionaalsemaks. Üks asi on siiski veel, mida peame tegema.
Praegu kaasame kõik failid nõutavate avalduste kaudu. Ja see töötab väikeste failide puhul hästi, kuid automaatse laadimise kasutuselevõtt koos nimeruumidega võib muuta rakenduse veelgi puhtamaks.
Ja seda me teemegi.
Tutvustame automaatset laadimist
Tuletage meelde varasemat postitust (kui olete seda lugenud), et automaatne laadimine on lihtne idee:
Kõlab suurepäraselt, eks? Kuid on hoiatus: peate kirjutama automaatlaaduri. PHP ei saa sellest üksi aru.
Ja see on põhjus, miks ma fännan seda, et meie nimeruumid järgiksid ka ühtset kataloogistruktuuri: kui sõelute nimeruumi ja faili nime, on faili tee koostamine ja selle automaatne laadimine suhteliselt lihtne.
Kõlab segane? Kõigepealt vaatame, kuhu me kataloogistruktuuri automaatlaaduri paigutame:
Järgmisena värskendage oma pistikprogrammi alglaadimisfaili nii, et see vajaks ainult automaatlaaduri faili.
<?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();
}
Loomulikult vajame failide laadimiseks automaatset laadijat. Põhimõtteliselt toimib see järgmiselt:
- eraldage sissetuleva faili nime komponendid (nt kataloogi tee ja failinimi),
- asendage allkriipsud sidekriipsudega, et veenduda, et fail järgib klassi failinime struktuuri,
- alustage täielikult kvalifitseeritud tee nime koostamist (mis on kataloog, failinimi jne),
- itereerige läbi nimeruumi kuni klassi nimeni ja looge failile täielik nimi,
- lisada see projekti.
See on otsekohene, kas pole? Kui järgite ühtset nimeruumi, kataloogi, klassi nime ja failinimede andmise skeemi, saate sama automaatlaadurit kõigis projektides uuesti kasutada.
Siin on koopia automaatlaadurist, mida ma kasutan ja lisan selle peaaegu igasse kasutatavasse projekti. Näete, et see järgib täpselt ülalkirjeldatut:
<?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 );
}
});
Ja sellega on pistikprogramm pakitud versioonile 1.0.0. Saate seda vaadata GitHubis (nii sõna otseses mõttes kui ka lihtsalt ülevaatamiseks). Ja loodetavasti on see aidanud WordPressi kontseptsiooni raames kiirelt prototüüpimiselt kontseptsioonini jõuda.