Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Architektura PHP?
Forum PHP.pl > Forum > PHP
Grzesiek
Czy ktoś może mi powiedzieć jak najlepiej budować duże serwisy internetowe oparte o php?
Czy są to:
- funkcje i klasy
- każda strona osobno, inkludować tylko nagłówek i stopke
- wszystkie strony w jednej

a może jeszcze inaczej?
Seth
Wiec nigdy do tej pory nie bawilem sie w includowanie plikow, ktore byly by osonymi stronami w zaleznosci od parametru w adresie. Ja stawiam na trzymanie textu w bazie danych i stamtad go wyciaganie i przerabianie przez jeden plik (do odpowiedniej grupy strony - np dla artykulow jden plik artciles.php itd).

Do tego powinno byc wszystko oparte o wzroce. Najwazniejsze jest oddzielenie kodu od wygladu strony. Ogolnym zalozeniem jest, ze kazdy robi swoja dzialke. Programista oskryptowuje strone a designer/webmaster tworzy jej wyglad.

Funkcje czy klasy hmm funkcje sa szybsze natomiast nieraz mozemy potrzebowac stworzyc kilka jednakowych obiektow, wiec klasy sa najlepszym rozwiazaniem. Tak wiec polaczenie klas i funkcji w zaleznosci od potrzeb.

Najwazniejszy jest jednak plan systemu. Trzeba rozrysowac sobie wszystie elementy. Potem dokonac selekcji newraligicznych pkt-ow i odpowiednio je zabezpieczyc czy przyspieszyc ich dzialanie.
DeyV
Ja natomiast pracuję troszkę inaczej. Tzn. z zachowaniem tych samych zasad, tj. szablony, classy itp. ale...
Zazwyczaj oddzielam panel administracyjny od konstrukcji strony.
Panele te tworzę zazwyczaj w oparciu o phpObjectForms, oraz przygotowane klasy z wygladem menu'sów oraz wyglądu strony.
Tak wiec przygotowanie konkretnego działu, np. dodawanie i wyświetlanie użytkowników polega na:
utworzeniu pliku users.php, includującego config, wszystkie niezbędne klasy i funkcje i zawierający informacje o tym jak i gdzie mają pojawić sie menu.
Dalej, już w wyniku wyborów użytkownika,
includuję pliki, gdzie zdefiniowane są formularze, lub
wykonuję odpowiednie zapytania do bazy, ładując wszytko do tabel, i
informuję skrypt, jaki plik ma zaincludować w odpowiednim (stałym) miejscu strony, czyli odpowiednim ekranie, by te dane wyświetlić. Zazwyczaj kożystam wtedy z Eval. Ma to sens szczegulnie wtedy, gdy dane wyświetlane są w prosy sposób, np. zwykłe tabele, z co najwyżej dodanymi elementami sortowania, przewijania itp. Zazwyczaj mają one taki sam wygląd, więc nie ma problemu z designem winksmiley.jpg

Oczywicie sytuacja wyglada zupełnie inaczej w przypadku części użytkowej, gdzie, od pewnego czasu, panuje SMARTY.
Grzesiek
Dzięki za podpowiedź biggrin.gif
Mam jeszcze jedno pytanie:
Co z prędkością? Z tego co wiem to includowanie zajmuje komputerowi najwięcej czasu i niewiem czy dobrym rozwiązaniem będzie umieszczenie skryptów dodatkowych w zewnętrznym pliku.
Chodzi mniej więcej o to:
adds.php
Cytat
function data() {
//zawartosć
}
function licznik() {
//zawartość
}
.....

index.php
Cytat
//Cała strona w php
include("/adds.php");
data();

Czy coś takiego ma sens jeżeli date i licznik używam wielokrotnie w różnych plikach (np. artykuly.php, news.php itd), no i najważniejsze pytanie czy to nie zwolni działania mojej strony?
?>[/php]
Seth
Hmm includowanie ma to do siebie, ze pozwala tworzyc plik do wielo krotnego uzytku ale jezeli dane funkcje sa male to lepiej je wrzucic do pliku, a nie includowac.
DeyV
Spowalnia? Naprawdę minimalnie.
Przepwrowadziłem kiedyś serię testów, które przekonały mnie, że włąściwie nie ma to żadnego wpływu na czes wykonywania skryptu. Chyba że zależy ci na oszczędnościach rzędu 0.001 sek. aaevil.gif

Natomiast znacznie ułatwia pisanie. Warto jedynie pamiętać, by zawsze używać include, (require) _once()
Grzesiek
Teraz już naprawde ostatnie pytanie rolleyes.gif
Z jakiej instrukcji korzystacie przy np systemie newsow.
Załózmy, że ten system ma trzy odnośniki:
- wszystkie newsy
- dodaj newsa
- dodaj komentarz

I jeżeli trzymam wszystko w jednym pliku, z której instrukcji lepiej skorzystać?
[php:1:ed32230062]
switch ($akcja)
case: "dodaj_newsa"
//cos
break;
case: "wszystkie"
//cos
break;
[/php:1:ed32230062]

czy

[php:1:ed32230062]
if($akcja=="dodj_newsa") {
//dd
} elseif($akcja=="wszystkie") {
//ff
}
[/php:1:ed32230062]
(oczywiście zmienną $akcja pobieram metodą GET z adresu strony.)

czy lepiej zrobić osobne pliki (choć nie wydaje mi się to dobrym rozwiązaniem)
BzikOS
Ja osobiście używam konstrukcji:
Kod
switch($akcja) {

  case "dodaj_newsa":

    dodaj_newsa();

    break;

  

  case "wszystkie":

    wszystkie();

    break;

}



function dodaj_newsa() {

}



function wszystkie() {

}
Jabol
Cytat
Ja osobiście używam konstrukcji:
Kod
switch($akcja) {

  case "dodaj_newsa":

    dodaj_newsa();

    break;

  

  case "wszystkie":

    wszystkie();

    break;

}



function dodaj_newsa() {

}



function wszystkie() {

}

poprawnie to powinieneś umieścić funckje przed dokumentem, bo wprawdzie w php4 nie ma to różnicy, ale to zły nawyk, jakbyś chciał wyjść poza php
DeyV
A jeszcze lepiej, szybciej:
[php:1:01ec973565]<?php
switch($akcja) {
case "dodaj_newsa":
include_once 'dodaj_newsa.inc.php';
break;
}
?>[/php:1:01ec973565]
Jabol
A tak?[php:1:b007982f6b]<?php
include_once($akcja.'.inc.php');
?>[/php:1:b007982f6b]
DeyV
raczej nie...
Przy Swich zawsze jest wartość default, a to jest ważne - niegdy nie ufaj danym pochodzącym od użytkownika...
Jabol
to może[php:1:694cd2fb05]<?php
$includes=array(
'index'=>'pliki/index.php',
'itp'=>'pliki/itp.php'
);
include $includes[$akcja];//tylko czy switch nie będzie szybsze i mniej zasobożerne??
?>[/php:1:694cd2fb05]
KaMeLeOn
Cytat
to może[php:1:ee34b7f9e3]<?php
$includes=array(
'index'=>'pliki/index.php',
'itp'=>'pliki/itp.php'
);
include $includes[$akcja];//tylko czy switch nie będzie szybsze i mniej zasobożerne??
?>[/php:1:ee34b7f9e3]

Tak nie bo musisz jeszcze dodatkowo sprawdzić czy istnieje taki klucz w tablicy...
[php:1:ee34b7f9e3]<?php
if( isset($includes[$akcja]) ) include $includes[$akcja];
?>[/php:1:ee34b7f9e3]
scanner
Cytat
Przy Swich zawsze jest wartość default, a to jest ważne - niegdy nie ufaj danym pochodzącym od użytkownika...
Dlatego ja np. używam czegoś w rodzaju:[php:1:bfc83bfcfb]<?php
// sprawdzam $_GET[] ...
switch($_GET['costam']{
default:
// wyswietlanie newsów (czy czegokolwiek innego)
break;
case 'dodaj':
// ....
break;
case 'edytuj':
// ....
break;
case 'kasuj':
// ....
break;
}
?>[/php:1:bfc83bfcfb]
5z474n
include_once(); questionmark.gif

czym to sie rozni od include() ? snitch.gif
KaMeLeOn
Cytat
include_once(); questionmark.gif

czym to sie rozni od include() ? snitch.gif

W MANUALU jest cała strona poświęcona
include(), include_once(), require(), require_once()...
Poczytaj...
5z474n
nic nei rozumiem sad.gif
itsme
Cytat
nic nei rozumiem sad.gif

podpowiedz zwroc uwage na swlowo once
a w manulau jest napisane i nie ma co rozumiec smile.gif
5z474n
jest napisane nie po mojemu :]

once ...mhmm :? raz ? dolacz raz ? dalej nei widze oznicy miedze zwyklym include sad.gif a tym include once sad.gif
Jabol
Cytat
[php:1:4be723df1e]<?php
// sprawdzam $_GET[] ...
switch($_GET['costam']{
default:
// wyswietlanie newsów (czy czegokolwiek innego)
break;
case 'dodaj':
// ....
break;
case 'edytuj':
// ....
break;
case 'kasuj':
// ....
break;
}
?>[/php:1:4be723df1e]
hehe, default na początku... to nigdy nie zadziała inaczej jak newsy lub coś
BzikOS
Cytat
poprawnie to powinieneś umieścić funckje przed dokumentem, bo wprawdzie w php4 nie ma to różnicy, ale to zły nawyk, jakbyś chciał wyjść poza php
Tzn. wrócić do Pascala? Chyba nie będę snitch.gif
DeyV
Do pascala wracać Ci nikt nie każe. Ale na php 5 przejść kiedyś pewnie będziesz chciał, co?
A tam, przynajmniej jak na razie, funkcje i klasy stają się dostępne dopiero po zdefiniowaniu...
scanner
Cytat
hehe, default na początku... to nigdy nie zadziała inaczej jak newsy lub coś
Wyjaśnij proszę.
DeyV
Jabol miał niewątpliwie na myśłi to, że, w założeniu, warunki w switch sprawdzane są kolejno, jeśli któryś jest prawdziwy, to zaczynamy wykonywać odpowiedni kod, aż do break. Tak więc, teoretycznie, default zawsze powinien być prawdziwy, i powinien się wykonywać. Przynajmniej tak jest w wielu C podobnych językach.
Ale ... w php ta konstrukcja działa poprawnie. Czemu? Nie wiem, jednak z uwagi na planowane dosyć rewolucyjne zmiany w php 5 wolałbym nie stosować takich "wątpliwych" rozwiazań.
scanner
No jeśli o to chodziło, to rozumiem. Akurat to było pisane z ręki. Sam staram się (jeśli nie zapomnę) default wystawiać na koniec switch'a.
BzikOS
Cytat
A tam, przynajmniej jak na razie, funkcje i klasy stają się dostępne dopiero po zdefiniowaniu...
Tzn. trzeba zdefiniować funkcję na początku przed jej użyciem?!? Czy tylko zadeklarować?
mateuszkrzeszowiec
Komuś się pomyliło z Java'ą smile.gif


Z manuala:
W php 3, funkcje muszą być zdefiniowane przed odwołaniem do nich. W php 4 nie ma takiego wymagania.
Jabol
Wydaje mi się, czy ktoś tu ma już doświadczenia z php5 (DeyV). Może mógłbyś napisać coś więcej (najważniejszse różnice/dodatki) i/lub wrzucić kilka ciekawych linków??
DeyV
Cytat
Komuś się pomyliło z Java'ą  

Ano widać, że php rozwija się w sprawdzonym kierunku.
Oczywiście, że 4 tego nie wymaga. 5 wymagać jednak chyba będzie - http://webcity.pl/recenzje.php/t/6 (źródło nie od końca pewne, ale po polsku)
A sprawdzone informacje? Zend górą:
- wszystko na temat nowego podejscia do obiektowości: http://zend.com/engine2/ZendEngine-2.0.pdf i http://zend.com/images/press/Feb_2003-4_Zeev_PHP5.pdf

A wszystko tak naprawdę jest tu: http://zend.com/zend/future.php
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.