Re Up: Prosilbym adminow o usuniecie, cos mi automat do logowania nie zadzialal i wyszlo jak wyszlo.
Cytat(qba10 @ 7.06.2008, 20:07:53 )

Witam
Właśnie co uczę się na sucho programowania obietowego.
Na sucho to kiepski pomysl, sprobuj cos realnego napisac - najlepsza rzecz do tego - blog na uzytek domowy.
Cytat
Mam o to taki kod:
<?php
class baza_danych
{
var $bazadanych_connect;
var $bazadanych_connect_db;
var $host;
var $user;
var $password;
var $dbname;
var $rodzaj;
public function __construct($rodzaj)
{
$this->rodzaj = $rodzaj ;
}
private function wybor_bazy_danych()
{
$konstrukcja_connect = '@'.$this->rodzaj.'_connect($this->host, $this->user, $this->password );';
$konstrukcja_connect_db = '@'.$this->rodzaj.'_select_db($this->dbname);' ;
$connect = $konstrukcja_connect;
$connect_db = $konstrukcja_connect_db;
if ($connect) { $this->bazadanych_connect = 1; } else { $this->bazadanych_connect = 0;}
if ($connect_db) { $this->bazadanych_connect_db = 1; } else { $this->bazadanych_connect_db = 0;}
}
function polaczenie($host, $user, $password, $dbname )
{
$this->host = $host ;
$this->user = $user ;
$this->password = $password ;
$this->dbname = $dbname ;
if ($this->bazadanych_connect = 0)
{
echo'blad polaczenie z baza danych'.$this->rodzaj ; }
if ($this->bazadanych_connect_db = 0)
{
echo'blad polaczenie z baza danych'.$this->rodzaj ; }
}
}
?>
I tu własnie moje pytanie. Czy ta klasa jest poprawna i czy przy wywołaniu jej w sposub pokazany ponizej otrzymam pozadany wynik?
<?php
$baza_danych = new baza_danych($mysql_lub_pg) ;
echo $baza_danych->polaczenie($host, $user, $password, $dbname ) ; ?>
1. Wlasnosci egzemplarza definiuj jako public/private/protected - od razu widac zakresy wlasnosci.
2. Z gory zakladasz w konstruktorze, ze bedzie dostarczona poprawna nazwa. Na sucho i w prostej rzeczy to OK, ale dobrze byloby zrobic jakas walidacje i dac tez wartosc domyslna.
3. W metodzie 'wybor_bazy_danych' nie nalezy przypisywac uchwytu do innej zmiennej. Po co to? Zrob tak po prostu:
<?php
IF/CASE ($this->rodzaj == COSTAM) {
$connect = @mysql_connect($this->host, $this->user, $this->password ); }
ELSE IF($this->rodzaj == COSTAM_INNEGO)
{
$connect = @pg_connect($this->host, $this->user, $this->password ); }
ELSE
JAKIES DOMYSLNE
if($connect) {
$this->konstrukcja_connect = true;
$konstrukcja_connect_db = '@'.$this->rodzaj.'_select_db($this->dbname);' ;
IF($konstrukcja_connect_db) { $this->bazadanych_connect = true; } else { $this->bazadanych_connect = false; }
?>
4. Definiujesz zreszta te metode nie wywolujac jej w ogole

!! W Ifach w metodzie polaczenie() zapisujesz wartosci do atrybutow obiektu, ale w ifie masz bledy, gdyz:
- $this->baza_danych_connect czy cos tam to cholera wie co w tym momencie zawiera (pewnikiem true albo NULL) zatem porownanie jest do chrzanu!!! Co wiecej operator porownania to '==', a nie '='. Ten drugi zapis zawsze daje TRUE lub FALSE w zaleznosci co tam niby porownujesz. (HINT: niektorzy purysci mowa by robic tak: IF(2 == $zmienna); )
- by zas byla okreslona przed ifami musisz wrzucic wywolanie metody wybor_bazy_danych. Zas najlepiej by bylo laczyc od razu w konstruktorze z danymi polaczenia jako parametrami (najlepiej przekazywanymi w tablicy, wygodniej to potem podpiac pod jakies pliki konfiguracyjne). Wiadomo przeciez, ze obiekt sluzy do polaczenia, a i jakiekolwiek jego metody tegoz polaczenia wymagaja.