1. क्या इसका WP प्रदर्शन पर एक दृश्य तरीके से प्रभाव पड़ता है?
यदि यह कुछ छोटी फ़ाइलों के लिए एक वास्तविक प्रभाव होगा, तो इसका एक प्रभाव होगा जो WP: PHP और सर्वर के प्रदर्शन से कम प्रभाव डालता है। क्या इसका वास्तव में कोई प्रभाव है? ज़रुरी नहीं। लेकिन आप अभी भी प्रदर्शन परीक्षण खुद करना शुरू कर सकते हैं।
2. क्या यह बेहतर है कि इसे 1 फ़ाइल में रखा जाए (functions.php)
अब सवाल "बेहतर क्या है"? समग्र फ़ाइल (ओं) से लोडिंग समय? फ़ाइल संगठन के दृष्टिकोण से? वैसे भी, इससे कोई फर्क नहीं पड़ता। इसे एक तरह से करें ताकि आप ढीले अवलोकन न करें और परिणाम को इस तरह से बनाए रख सकें जो आपके लिए सुखद हो।
3. इस बारे में जाने का सबसे अच्छा तरीका क्या है?
क्या मैं सामान्य रूप से करते बस में कहीं hooking है ( 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
एक ही कोड के साथ जा सकते हैं ।