1. Bunun WP performansı üzerinde görünür bir etkisi var mı?
IF PHP ve sunucu performansı: Gerçek bir bazı küçük dosyalar için etkileyecektir olurdu, o zaman bir o alt WP daha bir etkisi vardır etkileyen olurdu. Gerçekten bir etkisi var mı? Pek sayılmaz. Ancak yine de performans testlerini kendiniz yapmaya başlayabilirsiniz.
2. Hepsini 1 dosyada tutmak daha iyidir (function.php)
Şimdi soru "Daha iyi olan nedir?" Toplam dosya yükleme süresinden mi? Dosya organizasyonu açısından mı? Her neyse, fark etmez. Genel bakışı kaybetmemeniz ve sonucu sizin için hoş bir şekilde tutabilmeniz için bir şekilde yapın.
3. bu konuda en iyi yolu nedir?
Ne Normalde basitçe bir yere asılıyorsa yapmak ( plugins_loaded
, after_setup_theme
vb - Ne gerek bağlıdır) ve sonra sadece hepsini gerektirir:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
Her neyse, biraz daha karmaşık ve esnek hale getirebilirsiniz. Şu örneğe bir göz atın:
<?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;
}
}
Temelde aynı şeyi yapan bir sınıftır (PHP 5.3 ve üstü sürümlere ihtiyaç duyar). Avantajı, biraz daha ince taneli olması, böylece belirli bir görevi gerçekleştirmek için gereken klasörlerden dosyaları kolayca yükleyebilirsiniz:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Güncelleme
Biz yeni, post PHP v5.2 dünyasında yaşadıkça, biz de yararlanabilirsiniz \FilterIterator
. En kısa varyant örneği:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
PHP v5.2 ile uğraşmak zorunda kalırsanız, yine de \DirectoryIterator
ve hemen hemen aynı kodla gidebilirsiniz .