PDA

View Full Version : سوال: نظر سنجی درباره ی کلاس autoload



redhat2
جمعه 11 اسفند 1391, 17: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();
?>


فایل اصلی پیوست شد .

MMSHFE
جمعه 11 اسفند 1391, 19:57 عصر
اگه یه توضیح مختصری درباره کار کلاستون بدین خیلی خوب میشه. مثلاً هدف این کلاس چیه؟ قراره سایر کلاسها رو بطور خودکار Load کنه؟ اگه اینطوره که spl_autoload (http://www.php.net/manual/en/function.spl-autoload.php) هم اینکار رو انجام میده. اگه اینطور نیست و کلاس شما یکسری ویژگیهای متمایز داره، لطفاً توضیح بدین یا توی کد کامنت بگذارین تا افرادی که کمی تازه کارتر هستن هم بدونن چی به چیه و این کلاس چه کاربردی میتونه براتون داشته باشه. با تشکر از زحمتی که کشیدین و کلاس سودمندی که طراحی کردین.

redhat2
شنبه 12 اسفند 1391, 07:12 صبح
اگه یه توضیح مختصری درباره کار کلاستون بدین خیلی خوب میشه. مثلاً هدف این کلاس چیه؟ قراره سایر کلاسها رو بطور خودکار Load کنه؟ اگه اینطوره که spl_autoload (http://www.php.net/manual/en/function.spl-autoload.php) هم اینکار رو انجام میده. اگه اینطور نیست و کلاس شما یکسری ویژگیهای متمایز داره، لطفاً توضیح بدین یا توی کد کامنت بگذارین تا افرادی که کمی تازه کارتر هستن هم بدونن چی به چیه و این کلاس چه کاربردی میتونه براتون داشته باشه. با تشکر از زحمتی که کشیدین و کلاس سودمندی که طراحی کردین.

به نظرم یکمی پیچیدش کردم ، حق با شما ، اگه شما نظر بهتری دارین ، ممنون میشم که بگید ، فقط میخواستم ببینم نظر شما چیه ؟ .