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 -> 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
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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
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 smile.gif 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 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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
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 wink.gif


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
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 Aktualny czas: 22.08.2025 - 04:10