Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: __autoload()
Forum PHP.pl > Forum > PHP > Object-oriented programming
bela
hmm, ostatnio zaczelem pisac Odina od poczatku i myslalem o __autload
  1. <?php
  2. Odin::import('net.odin-framework.Exceptions');
  3. Odin::import('net.odin-framework.Logger');
  4. Odin::import('net.odin-framework.SessionHandler');
  5. Odin::import('net.odin-framework.ConfigParser');
  6.  
  7. function __autoload ($sClassName) {
  8. Odin::import($sClassName);
  9. }
  10. class Odin {
  11. public function __construct () {
  12. Logger::addNote('Start Odina');
  13. $abv = new net.odin-framework.HttpRequest();
  14. Logger::addNote('Koniec pracy');
  15. }
  16.  
  17. public static function import ($sPackage) {
  18. if (preg_match('/([a-zA-Z0-9_-]+.{0,1})+/', $sPackage, $aMatches)) {
  19. $aPackages = explode('.', $sPackage);
  20. $sFile = str_replace('.', '/', $sPackage);
  21. $sFile = $sFile . '.php';
  22. if(file_exists($sFile)) {
  23. require_once($sFile);
  24. } else {
  25. throw new NoSuchFileException($sFile);
  26. }
  27. }
  28. }
  29. private function runAction ($sActionName) {
  30. try {
  31. } catch (FallBack $f) {
  32.  
  33. }
  34. }
  35. }
  36.  
  37. ?>


i probowalem wywolywać klasy przez $abc = new net.odin-framework.Abc, ale wywala blad
Kod
Fatal error:  Function __autoload(net) threw an exception of type 'NoSuchFileException' in c:\gry\miniserver\uniserver3_1\diskw\www\nOdin\net\odin-framework\Odin.php on line 15


czyli php nawet nie idzisz po sciezce dry.gif tylko uzywa samego net, moze ktos bawil sie w cos takiego samego biggrin.gif
Imperior
Ja mam coś podobnego...
Tylko, że zamiat '.' używam '_'. Jest to spowodowane tym, że w nazwie klasy nie może być kropki! Jeśli zapodasz __autoload('net.odin-framework.Abc'); to zadziała, ale gdy zadasz:
  1. <?php
  2. $abc = new net.odin-framework.Abc;
  3. ?>

(W domyśle chodziło mi o to, żeby BBCode pokolorował '.' jako operator)

Przykład mojego nazewnictwa:
klasa: Noname_SQL_Service
plik: packages/noname/sql/noname_sql_service.php

Dzięki temu znając nazwe pliku wiem co w nim jest, znając nazwe klasy znam nazwę pliku, czyli znam zarazem położenie w systemie plików.

Pliki mają pełną nazwę też dlatego, że łatwiej jest mi edytować wiele plików, gdyż inaczej miałbym kilka service.php, a to troszkę utrudnia...

--edit--
Zapomniałem o jednym...
Skrypt instalatora, którego jeszcze nie mam tongue.gif, tworzy pakiet bez białych znaków, komentarzy itp. plik (wedle w/w przykładu) packages/noname/sql/noname_sql_package.php
A importuje się go tak samo przez 'Noname_SQL_Package'.
bela
ja poprostu widzialem jak ktoś (e-Gandalf chyba) chciał zrobić coś takiego i wlasnie to mnie nurtuje biggrin.gif
Vengeance
chciał nie oznacza zrobił winksmiley.jpg

jak dla mnie problem twki w wykorzystaniu niedozwolonych znaków w nazwach klasy. w tym przypadku kropki i minusa.

a-z A-Z 0-9 _ te sa bodajrze dozwolone smile.gif
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.