2010-10-29 90 views
0

我在PHP 彷彿有一個自定義的類裝載器功能..PHP自定義類加載器

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

它應該包含類和可選實例化類指定

問題是關於參數。我一直試圖傳遞的參數 整整一天,我試圖

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

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

幸運的是,沒有任何作品的xD 是有可能通過PARAMS? 我甚至試過..

$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; 
} 
+4

你好你想顯示你的load_class函數。 – kovshenin 2010-10-29 10:17:31

+0

[從PHP中的數組傳遞參數到構造函數]可能的重複(http://stackoverflow.com/questions/3395914/pass-arguments-from-array-in-php-to-constructor) – Gordon 2010-10-29 10:25:42

+0

您是否收到任何錯誤消息? – 2010-10-29 10:46:08

回答

1

在我看來,他們是引用你應該使用__autoload()只是加載類和規避不必手動調用此方法。這正是__autoload()的用途。

3

如果你在PHP 5.x我真的很建議你使用autoload。在PHP 5.3之前,你應該創建一些「命名空間」(我通常用_(下劃線)來做這個)

autoload允許你隨時包含類,如果你的類設計的很好,開銷最小。

通常我的自動加載功能看起來像:

<?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')); 

的功能將包括類

應用程序/模型/ car.php

+0

使用__autoload()並不明智,因爲它已被spl_autoload_register()取代。 __autoload()很快就會被棄用。 http://www.php.net/manual/en/function.spl-autoload-register.php – Omar 2013-10-25 19:45:58