Je fais une bibliothèque pour Cadedigniter et je souhaite transmettre plusieurs paramètres de types différents (objet PDO, nom d'utilisateur et mot de passe, configurations, etc.). P>
Je sais que je peux passer une gamme de toutes ces choses, mais cela ne semble pas être la meilleure façon de faire des choses (comme Comment puis-je passer plusieurs paramètres à une bibliothèque? P>
Merci d'avance. P> $ params code> ne peut jamais décrire ce qui est nécessaire) . p>
6 Réponses :
Par défaut dans CodeDigniter, vous ne pouvez pas. Vous ne pouvez transmettre qu'un seul paramètre à vos cours de bibliothèque. Comme indiqué avant que Param ne puisse être un tableau contenant tous les autres paramètres et que vous pouvez simplement l'utiliser comme Si vous avez $ param [0], $ param [1] ... code>.
Mais je suis d'accord avec vous, c'est un peu étrange et moche de voir. P>
PHP5 + CODE> Il y a le réflectionclass Cela pourrait vous aider, mais vous devriez éditer le code source du codeigniter et mettre en œuvre cette fonction. La fonction que vous recherchez est
réflexclass :: newinstance () code> que vous pouvez trouver ici . p>
Que puis-je faire avec la classe de réflexion?
@Truth, comme indiqué, vous pouvez appeler une nouvelle classe passant des arguments au constructeur. Il suffit de lire la documentation sur réflectionclass :: NewInstance () code> ici.
de mon expérience avec codeigniter, sauf si vous modifiez la classe code> chargeur code> pour agir différemment (comme vous le savez peut-être, dans le dossier J'utilise de nombreuses bibliothèques externes (surtout API SDKS ou Sparks) et j'aime construire mes propres fichiers de configuration où définir des valeurs qui seront chargées dans des bibliothèques lorsqu'elles les appellent, alors que je dois charger des bibliothèques, je viens de construire un Simple ou multidimensionnel Donc en bref Réponse, Application / CORE / CODE> Le dossier est l'endroit où vous devez mettre en œuvre vous classe personnalisée) Il n'y a aucun moyen (personne de cela que je connais) p>
$ params = tableau () code> en fonction de mes besoins, puis travaillez avec elle à l'intérieur de la bibliothèque. P>
$ Ceci-> Load-> Bibliothèque ('lib_name', $ params) code> est le seul moyen que je suis au courant. P>
Il existe plusieurs approches de ce problème particulier. Je vais énumérer (dans l'ordre préféré) façons de le résoudre:
Arguments de réseau associatif: strong> p> Cette approche est assez flexible, comme l'ordre des paramètres ne 'T Peu importe, et il résout une assez grande plainte dont beaucoup ont avec la manière dont PHP définit les paramètres de fonction. Vous passez simplement dans les paramètres «non par défaut» que vous souhaitez. C'est probablement le moyen le plus "codéigniterish" de le faire, si c'est même une chose. P> arguments numérotés: strong> p> Cette approche réplique le paramètre PHP typique paradigme (définit les noms, les commandes et les valeurs par défaut pour tous les paramètres attendus). P> // Instantiate the class
$CI =& get_instance();
if (isset($config[1])
{
// With numeric keys, it makes sense to assume this is
// is an ordered parameter list
$rc = new ReflectionClass($name);
$CI->$classvar = $rc->newInstanceArgs($config);
}
elseif ($config !== NULL)
{
// Otherwise, the default CI approach is probably good
$CI->$classvar = new $name($config);
}
else
{
// With no parameters, it's moot
$CI->$classvar = new $name;
}
Votre est le plus informatif, je me rends, je ne modifierai pas la source de CI car cela pourrait provoquer des problèmes. +1 + V, merci beaucoup :)
Très content que cela ait aidé. Honnêtement, je vais probablement référence à cela moi-même plus tard lorsque j'oublie.
On peut éviter la classe de chargeur et instancier des objets directement. AppPPath code> est une constante de codeigniter.
$this->load->library( 'some_class' )
$this->Some_class->do_something();
C'est le meilleur moyen: Créez un grand tableau
$data1=array('item1','item2','item3'); $arr=array('data1'=>$data1,'data2'=>'item4','data3'=>'item5');//create big array of datas extract($arr);//convert that to variables again after send to library //use that again print_r($data); echo $data2; echo $data3;
Utilisez $ ceci-> upload-> initialiser ($ configupload); code> après
$ ceci-> chargez-> bibliothèque ("télécharger", $ configupload); code> < / p>
Je n'ai pas utilisé Codedigniter, donc lorsque vous dites "Bibliothèque" Voulez-vous dire de passer des paramètres lorsque vous instaniez une classe?
Oui, c'est généralement fait avec
$ ceci-> Load-> Bibliothèque ('lib_name', $ params) code>, mais je veux passer plus d'un
$ param code>.
Quel est le problème avec le tableau? $ params = tableau (...)