Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] includowanie
Forum PHP.pl > Forum > Przedszkole
maximus.j
Witam ...

Od pewnego czasu się zastanawiam nad jedna rzeczą a mianowicie:
W pliku index.php mam:

  1. include ('lib/db.class.php'); // tu jest plik do obsługi mysql ..
  2. include ('lib/template.class.php'); // a tu klasa szablonowa ...
  3.  
  4.  
  5. $szablon = new template; // np tworze sobie obiekt tej klasy
  6.  


a teraz plik db.class.php :
  1. class db
  2. {
  3. ....
  4. }


a teraz plik template.class.php :
  1. include ('lib/db.class.php'); // tu jest plik do obsługi mysql ..
  2.  
  3. class template extends db
  4. {
  5. ...
  6. }


pytanie to jak unikać takiego zapetlenia ? Jak to dołączanie plików wygląda w zaawansowanej strukturze ?
Jestem początkujący - widać słychać - i chciałbym aby koś mi wytłumaczył idee ohno-smiley.gif




skowron-line
Poczytaj o autoloaderach
http://php.net/manual/en/language.oop5.autoload.php
maximus.j
Chodzi mi o taką sytuacje jeżeli chciałbym zbudować klasę user.class.php (wyświetlanie formularza do rejestracji, formularza logowania itp) i includowałbym tu plik: template.class.php a potem ją odziedziczył:
  1.  
  2. // user.class.php
  3.  
  4. include ('template.class.php');
  5.  
  6. class user_view extends template
  7. {
  8. # tu działania z klasa rodzicem
  9. }
  10.  


a w pliku index.php:
  1. include ('template.class.php'); # includuje tą klase
  2. include ('user.class.php'); # includuje tą klase + mam tu zainkludowany plik template.class.php
  3.  
  4. # działana na szablonach
  5. $body = new template;
  6.  
  7.  


to czy w pliku index.php nie będę miał 2x template.class.php questionmark.gif

by_ikar
IMO nie powinieneś używać include, ponieważ w przypadku braku takiego pliku (błędna ściezka, lub brak uprawnień odczytu) dostaniesz notica, a sam skrypt poleci dalej. Zamiast include używaj requiere, żeby nie dołączyć dwa razy tego samego pliku, używasz requiere_once, lub include_once. Są nieco wolniejsze, ale jak chcesz mieć pewność że dany plik zostanie wczytany tylko raz, to używasz reuiere_once lub include_once.

Druga sprawa, jest taka że twoja klasa usera nie powinna dziedziczyć klas template i na odwrót. Poczytaj o wzorcach projektowych, ostatnio popularne dzięki symfony 2 staje się dependency injection. Instancje klasy wstrzykujesz poprostu do innej klasy.
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.