Gromadzenie funkcji - obiekt? plik?

0

Robie sobie pewną stronę w php. Mechanizm kontroli sesji zrobiłem obiektowo, na kazdej stronie tworze sobie obiekcik ktory zalatwia co trzeba.

W miare rozwoju serwisu, powstawalo coraz wiecej funkcji wykorzystywanych w wielu podstronach. Początkowo gromadziłem je w osobnym pliku ktory includowalem jak był potrzebny. Poźniej stwiedziłem, że skoro na każdej stronie mam tworzony obiekt od sesji, to nie ma sensu importowac ciagle pliku z funkcjami, wiec wszystkie funkcje wkleilem do obiektu i wszystko mam w 1 miejscu.

Tylko teraz powstaje pytanie: Jak jest lepiej? Trzymać to w osobnym pliku, czy w obiekcie? Funkcje te nie są jakoś specjalnie miedzy sobą powiązane, niemal wszystkie to proste funkcje ktore wykonuja okreslone zadania, czyli np pobrac nazwe usera o konkretnym id.

Nie wiem co będzie wydajniejsze, includowanie pliku czy tworzenie obiektu dość sporej klasy? Na pewno obiekt jest wygodniejszy, bo dzieki niemu dostaje podpowiedzi funkcji i nie musze ciągle zagladac do osobnego pliku jak czegos nie pamietam.

Co jest wydajniejsze? Czy moze nie ma roznicy?

0

Jeżeli dostrzegasz rozbieżność między inkludowaniem i tworzeniem obiektów to znaczy, że ani nie robisz dobrze klas, ani nie indkludujesz poprawnie plików. Jeżeli masz problem z tym, że powstaje Ci za duża klasa to tym bardziej źle tworzysz klasy. Poczytaj sobie o modelu MVC: http://programowanie.opole.pl/archives/49 a jezeli uważasz ze model MVC nie jest Ci potrzebny, to przynajmniej przemysl sobie te klasy, bo dla stron WWW wyglada to troche specyficznie i nie w pelni się wpasowywuje w te całe bajeczki o OOP typu samochód-silnik.

Dla przykładu dla bloga typowe klasy w ogólnym zarysie to:

  • Strona
  • Kategoria
  • Post
    a logowanie i sesje to nie powinien być żaden obiekt ani klasa tylko prywatna metoda odpowiedniego obiektu, która sprawdza co i jak najlepiej jeszcze dziedziczona od jakiegoś generycznego typu...

Każdą klasę trzymasz osbie w osobnym pliku i tylko includujesz tam gdzie Ci to potrzebne...


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

Ja to w tej chwili mam tak:
(taki schematyczny przykład, ogolny zarys jak wygladaja pliki)
plik powiedzmy "podstrona.php":

 
include('config.php');
include('class.php');

$bla=new mojaKlasa();

if(!$bla->sesjaok()) {
  header("Location: ../");
  exit;
}

$WIDOK=array();

//wlasciwy kod aplikacji gdzie dane do wyswietlenia zapisuje w tablicy $WIDOK np:
// $WIDOK['zmienna']=$zmienna;

include("style/podstrona.phtml");

w pliku podstrona.phtml jest cały html i w odpowiednich miejscach odwolania do $WIDOK-u np:

if(!isset($WIDOK)) {
  header("Location: blad.php");
  exit;
}
//html
//wyswietlenie czegos:
echo $WIDOK['cos'];

//html

Nie wiem czy jest to optymalne, czy dla zaawansowanych specow od php to wyglada jak dowcip, ale przynajmniej dla mnie jest jako tako wygodne.
Zastanawiałem sie tylko, co jest lepsze, umiescic wszystkie czesto uzywane funkcje jako metody klasy mojaKlasa czy zapisac w zwyklym pliku php i includowac razem z confingiem, np tak:

 
include('config.php');
include('class.php');
include('funkcje.php');
0
protechnologia.pl napisał(a)

a logowanie i sesje to nie powinien być żaden obiekt ani klasa tylko prywatna metoda odpowiedniego obiektu

Jedno zdanie a przeczy samemu sobie...

0
root4 napisał(a)
protechnologia.pl napisał(a)

a logowanie i sesje to nie powinien być żaden obiekt ani klasa tylko prywatna metoda odpowiedniego obiektu

Jedno zdanie a przeczy samemu sobie...

Nic nie przeczy - protechnologi chodziło o to, że takie rzeczy jak logowanie nie mają być osobną klasą, tylko mają się zawierać (jako metoda) w klasie która logowanie będzie wykorzystywać, czyli np klasie user'a.

0

Ja bym na Twoim miejscu zrobił plik class_user.php, a w nim metody to zarządzania logowanie, takie jak:

  • login()
  • logout()
  • islogged()
    etc. etc. etc

i to własnie ten plik sobie includowal...


Opolski Portal Programistyczny
http://programowanie.opole.pl

0
marcinsvr napisał(a)
root4 napisał(a)
protechnologia.pl napisał(a)

a logowanie i sesje to nie powinien być żaden obiekt ani klasa tylko prywatna metoda odpowiedniego obiektu

Jedno zdanie a przeczy samemu sobie...

Nic nie przeczy - protechnologi chodziło o to, że takie rzeczy jak logowanie nie mają być osobną klasą, tylko mają się zawierać (jako metoda) w klasie która logowanie będzie wykorzystywać, czyli np klasie user'a.

No tak, ale to chyba oczywiste.

0
protechnologia.pl napisał(a)

Ja bym na Twoim miejscu zrobił plik class_user.php, a w nim metody to zarządzania logowanie, takie jak:

  • login()
  • logout()
  • islogged()
    etc. etc. etc

i to własnie ten plik sobie includowal...

Czyli sugerujesz zebranie wszystkich potrzebnych funkcji luzem (nie w klasie) w jednym pliku i dolaczanie go do kazdej strony?

0

Nie przezytałeś uważnie tego co napisałem... Zwróć uwagę na nazwę pliku jaką zaproponowałem oraz to, że użyłem słowa metody - nie funkcje...


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

Ok, to wiem, że kod sesji zrealizowac w jednej klasie, a co z pozostałymi funkcjami, jak np "pobiez wartosc pola o nazwie xx z bazy" - niekoniecznie zwiazanymi z uzytkownikami? luzem w pliku includowanym w razie potrzeby, czy tez w klasie?

0

To zależy, czego dotyczy to pole. Zazwyczaj jest tak, że klasy odpowiadają tabelom (poza różnymi wyjątami, np. tabele z relacji N-do-N), więc nie znając zagadnienia mogę zasugerować tylko, żebyś metody odwołujące się do bazy danych trzymał w klasach odpowiadających tabelom.


OpolskiPortal Programistyczny
http://programowanie.opole.pl

0
protechnologia.pl napisał(a)

To zależy, czego dotyczy to pole. Zazwyczaj jest tak, że klasy odpowiadają tabelom (poza różnymi wyjątami, np. tabele z relacji N-do-N), więc nie znając zagadnienia mogę zasugerować tylko, żebyś metody odwołujące się do bazy danych trzymał w klasach odpowiadających tabelom.

Czyli jak mam np tabele uzytkownicy, ustawienia i powiedzmy zamówienia, to do kazdej tabeli osobna klasa i w niej wszystko co operuje na tej tabeli? (dodaj, zmien, pobierz, etc)

Jeżeli na przykład chce pobrać jakies ustawienie, to tworze obiekt klasy ustawienia, wykonuje co trzeba i go usuwam (unset). No wlasnie, czy usuniecie obiektu ma jakis znaczacy wplyw na wydajnosc/zajetosc pamieci? Czy w prostych skryptach mozna to pominąć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1