1. 这对WP的性能有明显的影响吗?
如果它会对一些小文件产生真正的影响,那么它的影响将低于WP:PHP和服务器性能。这真的有影响吗?不是真的。但您仍然可以自己开始进行性能测试。
2. 是否最好将其全部保存在一个文件(functions.php)中
现在的问题是“什么更好”?从总文件加载时间开始?从文件组织的角度来看?不管怎样,这没什么区别。这样做的方式使你不会失去总体印象,并能以一种令你愉悦的方式保持结果。
3. 最好的方法是什么?
我通常做的只是在(plugins_loaded
, after_setup_theme
, 等等-取决于您需要什么),然后只需要全部:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
无论如何,你也可以让它变得更复杂、更灵活。看看这个例子:
<?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;
}
}
这是一个基本相同的类(需要PHP 5.3+)。好处是它的粒度更细粒度,因此您可以轻松地从执行特定任务所需的文件夹中加载文件:
$fileLoader = new WCM\\FilesLoader( \'assets/php\' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
更新,因为我们生活在一个新的后PHP v5中。2世界,我们可以利用
\\FilterIterator
. 最短变体示例:
$files = new \\FilesystemIterator( __DIR__.\'/src\', \\FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
如果您必须坚持使用PHP v5。2,那么你仍然可以
\\DirectoryIterator
和几乎相同的代码。