2010-10-29 7 views
0

i fait fonction classe personnalisée du chargeur en php quelque chose comme ..PHP classe personnalisée chargeur

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

son supposé inclure la classe et instancier le cas échéant la classe spécifiée

le problème est sur les paramètres . ive essayé de transmettre les paramètres toute la journée j'ai essayé

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

et

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

heureusement rien ne fonctionne xD est-il possible de passer les params? j'ai même essayé ..

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

ici il est ..

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

Vous pouvez Je ne veux pas montrer votre fonction load_class. – kovshenin

+0

duplication possible de [Passer arguments de tableau dans php au constructeur] (http://stackoverflow.com/questions/3395914/pass-arguments-from-array-in-php-to-constructor) – Gordon

+0

Avez-vous des messages d'erreur? ? –

Répondre

1

vous me semble que devriez utiliser __autoload() pour charger les classes juste comme ils sont référencés et contourner avoir à appeler cette méthode manuelle . C'est exactement ce que __autoload() est pour.

3

Si vous êtes en PHP 5.x, je vous recommande vraiment d'utiliser autoload. Avant PHP 5.3 vous devriez créer une sorte de "namespace" (je le fais habituellement avec _ (underscore))

Le chargement automatique vous permet d'inclure des classes à la volée et si vos classes sont bien conçues, la surcharge est minimale.

habituellement ma fonction de chargement automatique ressemble à:

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

cette façon d'appeler

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

la fonction comprendra la classe

app/modèle/car.php

+0

Il n'est pas judicieux d'utiliser __autoload() car il a été remplacé par spl_autoload_register(). __autoload() sera bientôt déprécié. http://www.php.net/manual/fr/function.spl-autoload-register.php – Omar