PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CodeIgniter Autoload


CharelB
29.11.2008, 13:34:06
Guten Tag,


Meine frage is die folgende , im moment sitze ich an einer applikation die mir das laden von Classes vereinfachen soll... nun ich habe mich vor geraumer zeit mit frameworks beschäftigt ( u.a : Zend & CodeIgniter ) ... Ich habe etwas in CodeIgniter gesehn was mir sehr gefiel
man konnte in der config einstellen beim Laden Der Applikation dass man die verschiedenen Bibliotheken laden konnte in CodeIgniter kann man das per Array machen.

z.b
$autoload['libraries'] = array('database');

und man konnte sie nachher per :

$this->database->query('SELECT * FROM test');

ansprechen


Hat einer eine ahnung wie ich das bei mir umsetzen/realisieren könnte


Kind regards CharelB


Bemerkung: Ich wollte für diese Applikation kein CodeIgniter benutzen deshalb wollte ich mal hier nachfragen ob jemand da ne Idee hat wie man es realisieren könnte

DokuLeseHemmung
29.11.2008, 13:55:40
Ja klar!!

Verwende SPL Autoload

Vorschlag:
Halte dich an das Zend / Pear Benennungsschema
Also, die Klasse Bla_Bli_Blub liegt dann in der Datei ./lib/Bla/Bli/Blub.php
In ./lib kommt folgende Datei: LibAutoload.php

class LibAutoload
{
public static function autoload($name)
{
$dirname = dirname(__FILE__);
$fileName = str_replace('_',DIRECTORY_SEPARATOR,$name).'.php';
$file = $dirname.DIRECTORY_SEPARATOR.$fileName;
if (is_readable($file)) require_once $file;
}

public static function register()
{
spl_autoload_register(array(__class__,'autoload'));
}
}

LibAutoload::register(); // direkt einbinden



In der index.php o.ä. machst du dann nur require_once "./lib/LibAutoload.php"; und ab dem Augenblick übernimmt der SPL Autoloader das Nachladen der benötigten Klassen.

CharelB
29.11.2008, 14:32:59
Guten Tag:


kann ich die wie in meinem beispiel auch als array laden?


Kind regards - Charel B

DokuLeseHemmung
29.11.2008, 14:57:54
Klar, du kannst alles machen!
Aber was willst du denn mit deinem Array überhaupt erreichen, was der Autoloader nicht viel transparenter erledigen würde?
Das habe ich scheinbar noch nicht verstanden .......
Bedenke: Globale Variablen sind böse!

PS:
Aha, mir kommt da eine Ahnung......
Suchst du etwa das
Registry Design Pattern
(Abstract) Factory Design Pattern
oder gar
Dependency Injection Design Pattern

Google gibt gern Auskunft.

Opendix
30.11.2008, 20:55:29
Einfachstes realisieren über die __autoload()-Funktion von PHP!



//Wird aufgerufen, sobald PHP eine Klasse nicht finden Kann
//Parameter ist der Name der gesuchten Klasse
function __autoload($classname)
{
$classes = array('klasse1' => 'class1.php', usw.);
if(isset($classes[$classname]))
{
die('Klasse nicht gefunden');
}
include_once($classes[$classname]);
}