Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: __autoload z dwóch różnych źródeł
Forum PHP.pl > Forum > PHP > Object-oriented programming
zephyr7
Chciałbym zapytać, czy da się skłonić funkcję "autoload" do ładowania klas z dwóch różnych folderów, w zależności od przekazywanego parametru.

Mam prosty framework, a w nim dwa katalogi: core\classes i app\controllers

chciałbym wywołać funkcję z core, np. db::get(); - i załadować klasę z core\classes\db_class.php

a równocześnie załadować właściwy kontroler z app\controllers\pages_controller.php

funkcja autoload może ładować brakujące klasy, ale czy da się nią pokierować w zależności od jakiegoś parametru?
Crozin
Zamiast korzystać z __autoload() skorzystaj z spl_register_autoload i utwórz dwa osobne autoloadery.
MicNeo
Można zrobić np tak. Nazwy klas tworzysz według takiego wzorca:
core_classes_dbClass.php

A autoload tak wygląda:
  1. function __autoload($classname)
  2. {
  3. $path = str_replace('_', DIRECTORY_SEPARATOR, $classname);
  4. $path .= '.php';
  5. require_once ($path);
  6. }


Czyli każde _ to jest spearator katalogów. Możesz oczywiście korzystać z innego wzorca nazewnictwa, ja do tego dorzucam zawsze class (u mnie by to było: class.db.php). Pamięasz o dobrym nazewnictwie i problem z głowy smile.gif

W twoim konkretnym przypadku, musiałbyś z nazw plików wywalić _ i dać np .
Smertius
Cytat(MicNeo @ 3.05.2011, 13:44:46 ) *
Można zrobić np tak. Nazwy klas tworzysz według takiego wzorca:
core_classes_dbClass.php

Albo zamiast tworzyć przydługie nazwy plików, możesz skorzystać z http://pl2.php.net/manual/en/language.namespaces.php
pejott
Nazewnictwo w PHP 5.3+ powinno być zgodne z http://groups.google.com/group/php-standar...-proposal?pli=1.
Autoload najlepiej niech odbywa się za pomocą obiektu class loader'a, na przykład.
https://github.com/symfony/symfony/blob/mas...ClassLoader.php.

Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.