Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zawsze Klasy...
Forum PHP.pl > Forum > PHP
KaGe
[php:1:78eaaa3023]<?php
Class Object
{
var $db_data;
var $data;
var $table;

function Object($table = null, $data = array(), $db_data = array())
{
$this->table = $table;
$this->data = $data;
$this->db_data = $db_data;
}

function SetData($data = array())
{
$this->data = $data;
}

function ReturnStringAND($data=null)
{
if (!is_array($data))
{
$data = $this->data;
}
$string = array();
foreach($data as $key => $value)
{
if (!is_numeric($value))
{
$value = "'$value'";
}
$string[] = "$key = $value";
}
$string = implode(" AND ", $string);
return $string;
}

function ReturnString($data=null)
{
if (!is_array($data))
{
$data = $this->data;
}
$string = array();
foreach($data as $key => $value)
{
if (!is_numeric($value))
{
$value = "'$value'";
}
$string[] = "$key = $value";
}
$string = implode(", ", $string);
return $string;
}

function ReturnFields()
{
$fields = array();
foreach($this->data as $key => $value)
{
$fields[] = "$key";
}
$fields = implode(",", $fields);
return $fields;
}

function ReturnValues()
{
$values = array();
foreach($this->data as $key => $value)
{
if (!is_numeric($value))
{
$value = "'$value'";
}
$values[] = "$value";
}
$values = implode(",", $values);
return $values;
}
}


Class User extends Object
{
var $data;

function User($data = array())
{
$this->table = "users";
$this->data = $data;
}
}


Class Session
{
function Login($user)
{
}
}

Class MySQL
{
var $host = "localhost";
var $login = "login";
var $password = "pass";
var $name = "name";

function MySQL()
{
mysql_pconnect($this->host, $this->login, $this->password);
mysql_select_db($this->name);
}
}

Class Database extends MySQL
{
function Get($object)
{
$o = mysql_query("SELECT * FROM " . $object->table . " WHERE " . $object->ReturnString());
$data = mysql_fetch_assoc($o);
$object->setdata($data);
return new Object($object->table, $data, $data);
}

function Add($object)
{
mysql_query("INSERT INTO " . $object->table . " (" . $object->ReturnFields() . ") VALUES (" . $object->ReturnValues() . ")");
return new Object($object->table, $object->data, $object->data);
}

function Save($object)
{
mysql_query("UPDATE " . $this->table ." SET " . $object->returnString() . " WHERE " . $object->returnStringAND($object->db_data));
return new Object($object->table, $object->data, $object->data);
}

function Delete($object)
{
mysql_query("DELETE FROM users WHERE " . $object->returnString());
return mysql_affected_rows();
}
}

?>[/php:1:78eaaa3023]

Mam tu podział na to, że mam oddzielne klasy dla każdej "warstwy" strony. Czy moje rozwiązanie jest jak by to nazwać... wydajne? bo w sumie to funkcjonalne w jakiś sposób na pewno...

Jest jeszcze kwestia logowania użytkowników. Mianowicie zastanawiam się, czy funkcje dot. logowania user dać jemu samemu do klasy - User, czy też zrobić klasę Session i tam wrzucić logowanie itd - natomiast sprawdzanie danych itd.. odbywac się będzie właśnie w metodach Session. Czy to jest dobre rozwiązanie?
patrycjusz
hmmm...
i jeszcze raz hmm...
kompletnie nie wiem o co w tej klasie ci chodzi rolleyes.gif rolleyes.gif rolleyes.gif a co do wydajnosci jej to wydaje mi się że hmm... nie no napewno mozna to zrobić szybciej smile.gif)
ale odpowiem chociarz na to drugie pytanie,
po pierwsze OOP jak sama nazwa wskazuje jest ideą obiektów,
w pewnej książce czytałem doskonały przykład o tym jak rozpisywać projekt klas,
patrz...
mamy do zrobienia system obslugi firmy,
wiemy ze będą obiekty związane z zarządzaniem użytkownikami , i z zarzadzaniem projektami itd, wiemy ze obiekty związane z zarządzeniami użytkownikami można dalej podzielić na obiekty związane z danymi użytkownika a jego logowaniem, wiemy że obiekty związane z danymi użytkownika można podzielić na formularze do obsługi tych danych i na obiekty zajmujące się komunikacja z baza danych itd itd, w książce tej było bardzo ładne podsumowanie, mniejwięcej tak,
" i dochodzimy do wniosku że ten obiekt jest tak prosty że nie będzie problemów z jego napisaniem" smile.gif pewnie coś przekręciłem ale idee starałam się zachować,
otóż,
każdy obiekt powinnien wykonywac jak najmniejszą ilość czynności, włąsciwie powinnien wykonywać jedną określoną czynność i nic więcej,
więc nijak tutaj widzę powiązanie metod służących do autoryzacji z metodami do obsługi dodawania użytkowników czy też sesji.
Odsyłam do googielków i proponuje dogłębnie przestudiowac temat OOP i również proponuję MVC smile.gif
Pozdrawiam patS
KaGe
2 KWESTIE

1)
Ok... powiedzmy, ze podzielimy wszystko tak jak w realnym świecie... czlowieka na organy i cechy, kazdy organ na tkanki, komorki, orgranelle, cząstki, atomy itd...
ok...

ale jak złożyć potem tego człowieka? rozumiem, że kolejne klasy muszą po sobie dziedziczyć - nadrzędna z podrzędnej - to jest oczywiste. Ale co zrobić, gdy taki np. człowiek słada się z kilku organów tej samej klasy - czyli obiektów danej klasy? - nie może przecież dziedziczyć po kilku rzeczach naraz... - wiec jak? jak go skonstuowac?

czy tak?

[php:1:f70718ae2a]<?php
Class atom
{
właściwośći i metody...
}

Class czastka extends atom
{
właściwośći i metody...
}
?>[/php:1:f70718ae2a]

i tu pojawia się pierwszy problem - jak zrobić, żeby cząstka mogła się składać z więcej niż jednego atomu? - bo później organella będzie składała się tak samo - z wielu cząstek

Czy ktoś może mi pomóć?

2) to tyle jeśli chodzi o podzielność - teraz mam pytanko jeśli chodzi o podział zadań. w moim przykładzie widać to dokładnie - można przestudiować biologię i zrozumieć, że w sumie każda rzecz ma tylko 3 sprawy - żyć, być podzielną oraz laczyc sie z inną - taką samą - by tworzyć obiekt wyższej klasy.

W tym punkcie sprawa tyczy się samego życia - łatwo jest to zrobić w przypadku prostej komórki bo byloby to cos takiego:

[php:1:f70718ae2a]<?php
Class organella
{
metody - korzystanie z zasoboow i zwracanie produktoow -
wlasciwosci - cechy konkretnej organelli - typ, nazwa itd...
}

Class komoorka - i tu jakos zrobic, zeby skladala sie z kilku organelli
{
metody - tak jak w przypadku organelli - zyje i korzysta z zasoboow swoich obiektoow podrzednych, ktore ja tworza
wlasciwosci - j/w/ nazwa itd...
}

?>[/php:1:f70718ae2a]

- jesli dobrze mi sie zdaje to jest to chyba ok?
A jak to przelozyc na problematyke serwisu internetowego ? - oraz czy tak nie stwarzamy sobie mega-skomplikowanej struktury, ktoora tak naprawde nie wymaga mega - komplikacji?

Czy macie jakies linki do (najlepiej polskich) stron o tym?
boloo77
Sprobuje odpowiedzieć na pkt 1. Przynajmniej jak ja to bym widział

[php:1:505b083a48]<?php
Class atom
{
//właściwośći i metody...
}

Class czastka
{
var $atomy=array();//tablica obiektow atom z któych składa się cząstka
//właściwośći i metody (w tym sterujące atomami - dołączanie atomów usuwanie itp)...
}

Class Komorka
{
var $czastki=array();//tablica obiektów cząstek z których składa się komórka
//właściwości i metody (w tym sterujące cząstkami w komórce)...
}
?>
[/php:1:505b083a48]

Oczywiście może powstać konieczność określenia pozycji atomu w cząstce. Wtedy możemy zrobić to tak:
[php:1:505b083a48]<?php
class atom_w_czastce extends atom
{
var $pozycja_w_czastce;
}
//i teraz
Class czastka
{
var $atomy=array();//tablica obiektow atom_w_czastce z których składa się cząstka (wraz z określeniem pozycji atomu w cząstce)
//właściwośći i metody (w tym sterujące atomami - dołączanie atomów usuwanie itp)...
}
?>[/php:1:505b083a48]

lub ew.
[php:1:505b083a48]<?php
class atom_w_czastce
{
var $atom;//obiekt atom
var $pozycja_w_czastce;
}
//i teraz
Class czastka
{
var $atomy=array();//tablica obiektow atom_w_czastce z których składa się cząstka (wraz z określeniem pozycji atomu w cząstce)
//właściwośći i metody (w tym sterujące atomami - dołączanie atomów usuwanie itp)...
}
?>[/php:1:505b083a48]
Mam nadzieje że nie zamieszałem... winksmiley.jpg
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.