Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pierwsza aplikacja obiektowa
sQQuil
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 27.02.2011

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


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 -> (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
freemp3
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


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





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 27.02.2011

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



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





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


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





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 27.02.2011

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



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 (IMG:style_emoticons/default/smile.gif) (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
freemp3
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Jak profesjonaliści to rozwiązują to nie wiem (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
lord2105
post
Post #7





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 14.09.2025 - 15:55