Klasy w PHP
Kiedyś były dla mnie czymś obcym, czymś nie zrozumiałym, a wręcz nie potrzebnym w PHP.
Ostatnio zaznajomiłem się z nimi i powiem Wam, że całkiem przyjemne są. Stosunkowo szybko się tworzy kod działającej strony,a przede wszystkim znacznie łatwiejszy jest później w edycji, bo wiadomo co gdzie jest.
Jak się ich używa?
Zasada jest bardzo prosta – na stronie gdzie chcemy, aby jakiś kawałek kodu się wyświetlił, a wiemy, że nie będzie tego mało, to zwykle korzystamy z
< ?php
include "function/prawa_ramka.inc.php";
?>
Tak – to jest całkiem w porządku rozwiązanie, ale zaśmiecamy sobie w ten sposób stronę kodem, który jest wymieszany z HTML’em, ponieważ w tym includowanym pliku musimy zawrzeć nie tylko wykorzystane swoje funkcje jakie stworzyliśmy, ale także dość sporą część kodu HTML+PHP poza funkcjami.
Dlatego lepsze są klasy – można powiedzieć, że to jest zbiór funkcji, które są związane ze sobą jakąś wspólną cechą (np. funkcje do logowania,rejestracji,zmiany danych w profilu), funkcje, które są pogrupowane tematycznie (np. wykorzystamy je tylko w prawej kolumnie tabeli na stronie).
W danej klasie 95% to kod PHP, a 5% to po prostu niezbędny kod HTML który zawarty jest wewnątrz metody (funkcji) w klasie.
Dodatkowym plusem dla klasy jest jej konstruktor – możemy z góry filtrować przychodzące dane, oraz zapisywać je lokalnie dla całek klasy (wszystkich metod/funkcji w klasie).
Ja konstruktora używam do łączenia się z bazą danych :)
Dla zainteresowanych mini-przykład klas:
1. Na stronie gdzie ma się coś wyświetlić wklejamy:
< ?
include ("class/NewsPanel.php"); //includujemy plik z klasą
$newsy = new NewsPanel(); //Tworzy nowy obiekt klasy
$newsy->lista_newsow(); //wykorzystujemy motodę zawartą w danej klasie
?>
Jeśli chodzi o sam plik class/NewsPanel.php to może on wyglądać tak:
< ?php
class NewsPanel {
function NewsPanel(){
include("mysql.php");
if(!mysql_connect($host,$user,$password)){
echo "Spis Newsów: nie można połączyć się z bazą danych!";
exit;
}
if(!mysql_select_db($database)){
echo "Spis Newsów: nie mozna wybrać bazy danych!";
exit;
}
mysql_query("SET NAMES latin2;");
}
function lista_newsow(){
$go = mysql_query("SELECT * FROM newsy ;");
while ( $pytam = mysql_fetch_array($go) )
{
echo ' '.$pytam['nazwa'].'
'.$pytam['opis'].'
Czytaj
';
}
}
}
?>
W klasie musi być funkcja, która się nazywa tak samo jak ona sama – jest to właśnie omawiany wcześniej konstruktor.
Tak jak powiedziałem – ja w konstruktorze łącze się za każdym razem z bazą przy użyciu funkcji
mysql_connect()
Po konstruktorze mamy inne funkcje, dzięki którym możemy wykorzystać otwarte połączenie z bazą danych, oraz wszystkie inne dostępne funkcje w PHP – żadnych ograniczeń.
Reasumując
Przewaga class nad funkcjami (dziwnie to brzmi ; masło maślane ;) )
+ większy porządek w kodzie i strukturze strony
+ bezpieczeństwo
+ Skupiamy się na kodzie PHP, a nie upiększaniu go HTML’em
Jakieś pytania? :)