Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> __autoload z dwóch różnych źródeł
zephyr7
post 30.04.2011, 08:19:32
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.11.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Crozin
post 30.04.2011, 09:26:55
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zamiast korzystać z __autoload() skorzystaj z spl_register_autoload i utwórz dwa osobne autoloadery.
Go to the top of the page
+Quote Post
MicNeo
post 3.05.2011, 12:44:46
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 7
Dołączył: 21.11.2004
Skąd: Kraków / Nowy Sącz

Ostrzeżenie: (0%)
-----


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 .


--------------------
Każda dobrze napisana rzecz wciąga pod wode i zapiera dech...
Go to the top of the page
+Quote Post
Smertius
post 3.05.2011, 12:50:56
Post #4





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
pejott
post 3.05.2011, 14:51:03
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 04:16