1. Hat dies sichtbare Auswirkungen auf die WP-Leistung?
Wenn dies einen echten Einfluss auf einige kleine Dateien haben würde, hätte dies einen Einfluss, der geringer ist als der von WP: PHP und der Serverleistung. Hat es wirklich einen Einfluss? Nicht wirklich. Sie können aber trotzdem einfach anfangen, Leistungstests selbst durchzuführen.
2. Ist es besser, alles in einer Datei (functions.php) zu speichern?
Jetzt lautet die Frage "Was ist besser?" Von der gesamten Ladezeit der Datei (en)? Aus Sicht der Dateiorganisation? Auf jeden Fall macht es keinen Unterschied. Tun Sie dies so, dass Sie nicht den Überblick verlieren und das Ergebnis auf eine für Sie angenehme Weise erhalten können.
3. Wie gehe ich am besten vor?
Was ich normalerweise tun ist einfach irgendwo Einhaken ( plugins_loaded
, after_setup_theme
etc. - hängt davon ab , was Sie brauchen) und dann verlangen , daß sie einfach alle:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
Wie auch immer, Sie können es auch etwas komplizierter und flexibler gestalten. Schauen Sie sich dieses Beispiel an:
<?php
namespace WCM;
defined( 'ABSPATH' ) OR exit;
class FilesLoader implements \IteratorAggregate
{
private $path = '';
private $files = array();
public function __construct( $path )
{
$this->setPath( $path );
$this->setFiles();
}
public function setPath( $path )
{
if ( empty( $this->path ) )
$this->path = \plugin_dir_path( __FILE__ ).$path;
}
public function setFiles()
{
return $this->files = glob( "{$this->getPath()}/*.php" );
}
public function getPath()
{
return $this->path;
}
public function getFiles()
{
return $this->files;
}
public function getIterator()
{
$iterator = new \ArrayIterator( $this->getFiles() );
return $iterator;
}
public function loadFile( $file )
{
include_once $file;
}
}
Es ist eine Klasse, die im Grunde dasselbe tut (benötigt PHP 5.3+). Der Vorteil ist, dass es etwas feiner strukturiert ist, sodass Sie ganz einfach Dateien aus Ordnern laden können, die Sie für eine bestimmte Aufgabe benötigen:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Aktualisieren
Da wir in einer neuen Welt nach PHP 5.2 leben, können wir die \FilterIterator
. Beispiel der kürzesten Variante:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Wenn Sie sich an PHP v5.2 halten müssen, können Sie immer noch mit \DirectoryIterator
und so ziemlich dem gleichen Code arbeiten.