Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pierwsza aplikacja obiektowa
Forum PHP.pl > Forum > Przedszkole
sQQuil
Witajcie,

poznałem już lekko php i przymierzam się do napisania pierwszej aplikacji przynajmniej częściowo obiektowo. Drodzy koledzy koleżanki nie daje mi jednak spokoju jedna kwestia. Mianowicie struktura katalogów. Przeczytałem już kilka poradników ale w żadnym z nich nie znalazłem odpowiedzi na następujące pytanie :


Moja struktura wygląda następująco

ROOT
..............Config
..............Class
..............Files
..............Cache
..............Tmp

i teraz w katalogu config tworzę skrypt z danymi dostępu do bazy o nazwie db_access.php a tam

  1. <?php
  2.  
  3. $dbhost = 'host';
  4. $dbuser = 'user';
  5. $dbpass = 'pass';
  6. $dbname = 'name';
  7.  
  8. ?>


następnie jest plik base_config.php (w tym samym katalogu) gdzie są wszelkie definicje w tym definicje katalogów.

Moje pytanie brzmi czy jak należy includować plik do pliku tak aby w samej aplikacji nie trzeba było dodawać 10 requariów tylko powiedzmy jeden 2 a reszta była by zawarta we sobie np.

db_access.php -> klasy z połączeniem z bazą
base_config.php -> questionmark.gif?

i tak dalej.

Nie chce powielać złych wzorców ani uczyć się robić tego niechlujnie dlatego moja prośba o pomoc doświadczonych kolegów smile.gif

Pozdrawiam
freemp3
W php istnieje taka magiczna funkcja jak __autoload. Jej parametrem jest nazwa klasy, która ma być załadowana. Możesz nazwać pliki tak samo jak nazwy klas, które się w nich znajdują i w ten sposób będziesz miał problem ładowania klas z głowy.
sQQuil

Dzięki za odpowiedź. Niestety nie jest to to o co mi chodziło. Generalnie chodzi mi o to jak includować pliku do Siebie tak, ażeby nie linkować ich za każdym razem do nowego skryptu.
freemp3
Możesz stworzyć jeden ogólny plik, w którym będziesz ładował reszte plików. Tym sposobem dołączasz do kodu tylko ten jeden ogólny, a reszta leci z automatu.
sQQuil

Właśnie o coś takiego mi chodziło a możesz mi z doświadczenia powiedzieć czy to ma być tylko plik w którym będą się schodziły wszystkie includy czy np. ma to być jakiś plik który potem będzie już generował jakąś cześć strony. Jak rozwiązują ten problem profesjonaliści smile.gif questionmark.gif
freemp3
Jak profesjonaliści to rozwiązują to nie wiem tongue.gif Jeśli o mnie chodzi to zazwyczaj mam plik functions.php, w którym trzymam jakieś tam swoje funkcje oraz ładuje pliki, które są niezbędne, a których nie dam rady załadować przy pomocy __autoload. Jeśli w kodzie zajdzie potrzeba dociągnięcia jakiegoś pliku to mam przygotowaną do tego celu klasę, która "szuka" pliku, którego potrzebuje i zajmuje sie obsługą błedów.
lord2105
Krótki przykład:

Plik głowny aplikacji:
  1. function __autoload($class_name)
  2. {
  3. require_once 'lib/Application.class.php';
  4. Application::load($class_name);
  5. }


Klasa aplikacji:
  1. public static function load($class_name)
  2. {
  3. self::generateClassMap();
  4.  
  5. if (!isset(self::$map[$class_name]))
  6. {
  7. throw new Exception('Unknown class ' . $class_name);
  8. }
  9.  
  10. require_once self::$map[$class_name];
  11. }
  12.  
  13. public static function generateClassMap()
  14. {
  15. self::$map = array();
  16.  
  17. self::scan('lib/');
  18. }
  19.  
  20. public static function scan($dir)
  21. {
  22. $match = array();
  23.  
  24. $rd = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), true);
  25. foreach ($rd as $file)
  26. {
  27. if(!is_file($file->getPathname())) continue;
  28.  
  29. if (preg_match('/([a-z0-9_]+).(class|interface).php$/i', $file->getPathName(), $match))
  30. {
  31. self::$map[$match[1]] = $file->getPathName();
  32. }
  33. }
  34. }


Jak widać bez includowania plików manualnie - dodajemy plik do katalogu lib/, który musi mieć nazwę w postaci: Logger.class.php lub interfejs w postaci: Module.interface.php - ponadto wykorzystanie RecursiveDirectoryIterator umożliwia nam tworzenie drzewa katalogów w lib/ tak jak nam się to żywnie podoba wink.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.