Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]PSR-0, struktura katalogów, namespaces i nazw klas
olechafm
post 8.11.2011, 12:55:40
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


Czy mógłby ktoś na prostym przykładzie opisać zasady stosowania PSR-0?

Chodzi mi o przykładowe drzewo katalogów z nazwami plików, nazwami klas i przestrzeni nazw, które będzie stosowało tą konwencję nazewnictwa.

Ten post edytował olechafm 8.11.2011, 13:06:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
skowron-line
post 8.11.2011, 13:20:03
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Zobacz to
https://gist.github.com/1234504


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
olechafm
post 9.11.2011, 15:47:44
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


ok mam folder root'a np htdocs w xampie i w nim umieszczam swój projekt, prosta struktura, w folderze roota znajdują się:

index.php
.htacces
core(folder)
-----baseclass(plik php)
-----subcore(folder)
---------loader(plik php)

app(folder)
libs(folder)

czyli mam tu na przykład 4 przestrzenie nazw:

core
core\subcore
app
libs

w pliku basecalss.php będę miał:

  1. namespace core;
  2. class baseclass{
  3. }


w pliku loader.php będę miał:

  1. namespace core\subcore;
  2. class loader{
  3. }


i teraz żeby utworzyć obiekty klas baseclass i loader w pliku index.php muszę użyć jakiej konstrukcji?

muszę użyć:

  1.  
  2. require('core/baseclass.php');
  3. require('core/subcore/loader.php');
  4.  
  5. $obiektbaseclass = new core\baseclass();
  6. $obiektloader = new core\subcore\loader();
  7.  


czy tak się zgadza?

dobra nie wiem co się działo, ale teraz działa a wcześniej nie chciało... chciałem to wszystko sprawdzić, bo nie działał mi autoloader (Open Power Autoloader), ale przepisałem wszystko ponownie i kurde teraz działa...



--------------------------------------------------------------------------------------------------------------------
Żeby nie zaczynać nowego wątku, napiszę tutaj:

Mam link do aplikacji

nazwa.pl/produkty/pokaz/1

interpretuję je jako

nazwa.pl/kontroler/akcja/parametr

router rozbija adres i udostępnia je metodami dostępowymi pod odpowiednimi zmiennymi

$kontroler;
$akcja;
$parametry; (array)

dispatcher który otrzymał obiekt routera wyciąga sobie z niego te dane i ma zapisane w swoich zmiennych, sprawdza czy są one poprawne (czy dany kontroler jest dozwolony, czy dla danego kontrolera istnieje dana akcja itp) i na tej podstawie albo wywołuje je zgodnie z podanymi danymi albo używa domyślnych albo wywala błąd że dany adres nie istnieje

dispatcher i router znajdują się w przestrzeni nazw Core odzwierciedlonej katalogiem root/Core

natomiast kontrolery znajdują się w przestrzeni nazw App odzwierciedlonej katalogiem root/App

ostatnią funkcją dispatchera, jeśli wszystko jest poprawnie, jest funkcja która wywołuje nowy obiekt kontrolera, zanim zacząłem używać przestrzeni nazw przy założeniu powyższych danych:
  1. $kontroler="produkty";
  2. $akcja="pokaz";

funkcja ta wywoływała kontroler poprzez najprostsze:
  1. $app=new $kontroler;

i w ten sposób tworzyłem obiekt kontrolera, teraz muszę się do niego odwołać w inny sposób, mianowicie
  1. $app = new \App\Produkty\Produkty();


żeby znalazł je autoloader

kontroler Produkty, znajduje się w katalogu root/App/Produkty/Produkty.php, folder App zawiera kilka modułów Produkty, Użytkownicy itd, odzwierciedlone w katalogach i przestrzeniach nazw np App\Produkty to przestrzeń nazw dla kontrolera Produkty;

w jaki sposób nazwę kontrolera "produkty" wyciągniętą z adresu zamienić na nazwę obiektu \App\Produkty\Produkty(), której muszę użyć by go wywołać...

oczywiście rozumiem, że do końca nie musi to być poprawne rozwiązanie (pewnie napewno nie jest), ale próbuję ogarnąć przestrzenie nazw i PSR-0

up?

Ten post edytował olechafm 8.11.2011, 23:32:44
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:15