redhat2
جمعه 11 اسفند 1391, 18:27 عصر
سلام به دوستان ، من یه کلاس Autoload نوشتم و میخواستم نظر شما را راجع به اون بدونم ، اگه راهه حلی برای بهتر کردن کلاس می دونین خیلی خیلی ممنون میشم بگید . :D
کلاس به این صورت هستش که Folder و File ( درصورت وجود subfolder ) را از فایل Config.php میخونه و کلاس را load میکنه که یه مثالش را در صفحه ی index آوردم .
config.php
<?php
return array(
'Libraries' => array(
'Request' => 'Libraries\Request'
)
);
?>
کلاس Autoloader :
<?php
namespace Rcms\Libraries;
class Autoloader {
private $_setParam = array();
private $_folder;
private $_file;
private $_filename;
private $_subfolder = null;
const DS = DIRECTORY_SEPARATOR;
const SL = '/';
public function setParam($setParam) {
if (is_string($setParam)) {
$this->_setParam = array($setParam);
} else {
throw new \Exception(sprintf('the param must be a string , %s given . ', gettype($setParam)
));
}
}
public function breakParam() {
foreach ($this->_setParam as $setParam) {
$this->_setParam = explode(self::DS, $setParam);
$this->_folder = $this->_setParam[0];
$this->_file = $this->_setParam[1];
if (isset($this->_setParam[2])) {
$this->_subfolder = $this->_setParam[2];
}
}
}
public function register() {
$droot = rtrim($_SERVER['DOCUMENT_ROOT'], self::SL) . self::DS . $this->_folder;
$droot = str_replace(self::DS, self::SL, $droot);
$droot_num = strripos($droot, self::SL);
$this->_folder = ltrim(substr($droot, $droot_num), self::SL);
if ($this->_subfolder !== null) {
$this->_filename = $this->_folder . self::SL . $this->_subfolder . self::SL . $this->_file . '.php';
if (file_exists($this->_filename)) {
include($this->_filename);
} else {
throw new \Exception('the class doesn\'n exist . ');
}
} else {
$this->_filename = $this->_folder . self::SL . $this->_file . '.php';
if (file_exists($this->_filename)) {
include($this->_filename);
} else {
throw new \Exception('the class doesn\'n exist . ');
}
}
}
}
?>
کلاس request (کلاسی برای load) :
<?php
namespace Rcms\Libraries;
class Request {
public function __construct() {
echo "we are in request page . ";
}
}
?>
index.php :
<?php
namespace Rcms;
use Rcms\Libraries\Autoloader;
require_once('Libraries/Autoloader.php');
$Config = require_once('Config/Config.php');
$objAutoload = new Autoloader();
$objAutoload->setParam($Config['Libraries']['Request']);
$objAutoload->breakParam();
$objAutoload->register();
$request = new Libraries\Request();
?>
فایل اصلی پیوست شد .
کلاس به این صورت هستش که Folder و File ( درصورت وجود subfolder ) را از فایل Config.php میخونه و کلاس را load میکنه که یه مثالش را در صفحه ی index آوردم .
config.php
<?php
return array(
'Libraries' => array(
'Request' => 'Libraries\Request'
)
);
?>
کلاس Autoloader :
<?php
namespace Rcms\Libraries;
class Autoloader {
private $_setParam = array();
private $_folder;
private $_file;
private $_filename;
private $_subfolder = null;
const DS = DIRECTORY_SEPARATOR;
const SL = '/';
public function setParam($setParam) {
if (is_string($setParam)) {
$this->_setParam = array($setParam);
} else {
throw new \Exception(sprintf('the param must be a string , %s given . ', gettype($setParam)
));
}
}
public function breakParam() {
foreach ($this->_setParam as $setParam) {
$this->_setParam = explode(self::DS, $setParam);
$this->_folder = $this->_setParam[0];
$this->_file = $this->_setParam[1];
if (isset($this->_setParam[2])) {
$this->_subfolder = $this->_setParam[2];
}
}
}
public function register() {
$droot = rtrim($_SERVER['DOCUMENT_ROOT'], self::SL) . self::DS . $this->_folder;
$droot = str_replace(self::DS, self::SL, $droot);
$droot_num = strripos($droot, self::SL);
$this->_folder = ltrim(substr($droot, $droot_num), self::SL);
if ($this->_subfolder !== null) {
$this->_filename = $this->_folder . self::SL . $this->_subfolder . self::SL . $this->_file . '.php';
if (file_exists($this->_filename)) {
include($this->_filename);
} else {
throw new \Exception('the class doesn\'n exist . ');
}
} else {
$this->_filename = $this->_folder . self::SL . $this->_file . '.php';
if (file_exists($this->_filename)) {
include($this->_filename);
} else {
throw new \Exception('the class doesn\'n exist . ');
}
}
}
}
?>
کلاس request (کلاسی برای load) :
<?php
namespace Rcms\Libraries;
class Request {
public function __construct() {
echo "we are in request page . ";
}
}
?>
index.php :
<?php
namespace Rcms;
use Rcms\Libraries\Autoloader;
require_once('Libraries/Autoloader.php');
$Config = require_once('Config/Config.php');
$objAutoload = new Autoloader();
$objAutoload->setParam($Config['Libraries']['Request']);
$objAutoload->breakParam();
$objAutoload->register();
$request = new Libraries\Request();
?>
فایل اصلی پیوست شد .