Загрузчик пользовательских классов PHP - PullRequest
0 голосов
/ 29 октября 2010

я сделал пользовательскую функцию загрузчика классов в php примерно так:

load_class($className,$parameters,$instantiate);

она должна включать класс и, необязательно, создавать экземпляр класса, указанного

, проблема в параметрахя пытался передать параметры весь день, я пытался

load_class('className',"'param1','param2'",TRUE);

и

load_class('className',array('param1','param2'),TRUE);

к счастью, ничего не работает xD возможно ли передать параметры?я даже пытался ..

$clas = new MyClass(array('param1','param2'));

вот оно ..

function load_class($class, $param=null, $instantiate=FALSE){
    $object = array();
    $object['is_required'] = require_once(CLASSES.$class.'.php');
    if($instantiate AND $object['is_required']){
        $object[$class] = new $class($param);
    }
    return $object;
}

Ответы [ 2 ]

3 голосов
/ 29 октября 2010

если вы находитесь в PHP 5.x, я действительно рекомендую вам использовать autoload .До PHP 5.3 вы должны создать своего рода «пространство имен» (я обычно делаю это с помощью _ (подчеркивание)) *

автозагрузка позволяет вам включать классы на лету, и если ваши классы хорошо спроектированы, накладные расходы минимальны.

обычно моя функция автозагрузки выглядит следующим образом:

<?php
function __autoload($className) {
    $base = dirname(__FILE__);
    $path = explode('_', $className);

    $class = strtolower(implode('/',$path));

    $file = $base . "/" . $class;       

    if (file_exists($file)) {
        require $file;      
    }
    else {
        error_log('Class "' . $className . '" could not be autoloaded');
        throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file); 
    }
}

таким образом, вызывая

$car = new App_Model_Car(array('color' => 'red', 'brand' => 'ford'));

функция будет включать приложение класса

/model/car.php

1 голос
/ 29 октября 2010

Мне кажется, что вы должны использовать __ autoload () , чтобы просто загрузить классы, на которые они ссылаются, и обойти необходимость вызова этого метода вручную. Это именно то, для чего __autoload ().

...