Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasy w php, jak zbudować strukturę?
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam, chciałbym się dowiedzieć jak najlepiej zbudować strukturę klas tzn. przedstawię 3 wersje i chciałbym się dowiedzieć, która z nich odpowiada standardom lub jest najlepsza do wykorzystania w projektach.

Wersja A

class.php
  1. class komentarze()
  2. {
  3. function getComment()
  4. {
  5. $sql=mysql_query("select * from komentarze");
  6. while($this->row=mysql_fetch_assoc($sql))
  7. {
  8. $this->display();
  9. }
  10.  
  11. }
  12.  
  13. function display()
  14. {
  15. echo 'komentarz to: '.$this->row['komentarz'];
  16. }
  17.  
  18. }


komentarze.php
  1.  
  2. $komentarze=new komentarze;
  3. $komentarze->getComment();
  4.  





wersja B

class.php
  1. class komentarze()
  2. {
  3.  
  4. function display()
  5. {
  6. echo 'komentarz to: '.$this->komentarz;
  7. }
  8.  
  9. }


komentarze.php
  1. $komentarze = new komentarze;
  2.  
  3. $sql=mysql_query("select * from komentarze");
  4. while($row=mysql_fetch_row($sql))
  5. {
  6. $komentarze->komentarz=$row['komentarz'];
  7. $komentarze->display();
  8. }



wersja C jest podobna do wersji b z tym że zmienia się plik komentarze.php

  1.  
  2. $i=0;
  3. $sql=mysql_query("select * from komentarze");
  4. while($row=mysql_fetch_row($sql))
  5. {
  6. $i=$i+1;
  7. $i= new komentarze;
  8. $i->komentarz=$row['komentarz'];
  9. $i->display();



Jeśli tu powinno być zupełnie coś innego to też napiszcie, chcę się nauczyć jak budować struktury klas, dlatego liczę na Waszą pomoc, z góry dziękuję i pozdrawiam.
Psajkus
wybieram opcje D, czyli zupełnie coś innego
neo1986kk
swietnie, a możesz ją przedstawić czy się zgrywasz?
Psajkus
za Ciebie pisać nie będę. Możesz się wzorować na tym wpisie http://blog.fedecarg.com/2009/03/11/domain...-architectures/
neo1986kk
z tego wynika ze najbardziej pasuje tutaj wersja A. Datego ze zapytanie mysql jest bezpośrednio w klasie.

  1. $komentarze=new komentarze;
  2. $komentarze->find() // dla wszystkich
  3. $komentarz=$komenatrze->current();
  4. echo $komentarze->display();
Psajkus
Ja bym napisal 2 klasy. Repozytorium - operacje CRUD i inne zapytania do bazy danych i Encje przechowujaca dane.
neo1986kk
brniesz za daleko, ja wiem że do zapytań można utworzyć nową klasę, ale nie o to mi chodzi, chodzi mi o samą strukturę a najbadziej o to czy tworzyc nowe klasy czyli

$klasa=new klasa
$a=a;

$klasa=new klasa
$a=b;

itd...

czy dac

$klasa = new klasa;

while($row=mysql_fetch_row($sql)
{
$a=$row[0];
}
by_ikar
Twórz nowe klasy które będą specjalizować tylko w określonych działaniach. Komentarze to powiedzmy jest jedno takie działanie, pobieranie komentarzy, pobieranie jednego wiersza, kasowanie, aktualizowanie, dodawanie czyli crud (create, read, update, delete) o którym wyżej napisał mój przedmówca. Newsy, artykuły, użytkownicy, sesje, baza danych. To wszystko to są osobne obiekty, każdy z nich robi co innego i za co innego jest odpowiedzialny. Tak więc pierwszy przykład w pierwszym poście jest w miarę poprawny, nie licząc tej bazy danych wink.gif

EDIT: chyba rozumiem o co ci chodzi w ostatnim poście. Tak więc zrobiłbym to mniej więcej tak:

Kod
<?php


class Komentarze
{
    protected $database;
    
    public function __construct(Database $database)
    {
        $this->database = $database;
    }
    
    public function findComentBy(array $criteria)
    {
        return $this->database->select()->from('coments')->where($criteria)->get();
    }
}

$newsComent = new Komentarze($polaczenieBazyDanych);

echo '<pre>'.print_r($newsComent->findComentBy(array('kategoria' => 'newsy', 'id' => 'id_newsa'))).'</pre>';


Czyli swoje kryteria wyszukiwania komentarzy podajesz w parametrze. Możesz nazwać te metody inaczej (getComent przykładowo), tutaj to jest tylko przykład.
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.