Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Poprawnść składni...
Forum PHP.pl > Forum > PHP
..:: pingu ::..
Dopiero zaczynam sie bawić OOP wie proszę powiedzcie czy to jest poprawie...
[php:1:7d670a965c]<?php
class mysql
{
var $host;
var $user;
var $pass;

function connect()
{
return mysql_connect( $this->host , $this->user , $this-base );
}

function query( $sql )
{
return mysql_query( $sql );
}
}
class counter
{
function counter()
{
$tmp = mysql::query( $sql );
}
}


?>[/php:1:7d670a965c]
mam wiec pytanie czy takie cosik jest poprawne ( bo u mine działa ), albo czy można to jakos inaczej zrobic.
splatch
Oto jaka konstrukcja klasy byłaby w miarę rozsądna.
[php:1:9c50a33448]<?php

class sql_db
{
//połacz z baza
function sql_db( $db_host, $db_user, $db_pass, $db_name )
{
if( !$this->connect = @mysql_pconnect( $db_host, $db_user, $db_pass ) )
{
if( !$this->connect = @mysql_connect( $db_host,$db_user, $db_pass ) )
{
exit( 'Przepraszamy, ale strona jest chwilowo niedostępna.' );
}
}
if( $this->connect )
{
if( !$this->select = @mysql_select_db( $db_name ) )
{
exit( 'Przepraszamy, ale strona jest chwilowo niedostępna.' );
}
}
else
{
exit( 'Przepraszamy, ale strona jest chwilowo niedostępna.' );
}
}

function close()
{
return @mysql_close( $this->connect );
}

function query( $query )
{ // zwraca i zapisuje
return $this->result = @mysql_query( $query );
}


function fetch_array( $result = null )
{
if( $result === null )
{
return @mysql_fetch_array( $this->result );
}
else
{
return @mysql_fetch_array( $result );
}
}

function num_rows( $result = null )
{
if( $result === null )
{
return @mysql_num_rows( $this->result );
}
else
{
return @mysql_num_rows( $result );
}
}

function fetch_row( $result )
{
if( $result === null )
{
return @mysql_fetch_row( $this->result );
}
else
{
return @mysql_fetch_row( $result );
}
}

function fetch_object($result)
{
if( $result === null )
{
return @mysql_fetch_object( $this->result );
}
else
{
return @mysql_fetch_object( $result );
}
}

function error()
{
return @mysql_error( $this->connect );
}
}
?>[/php:1:9c50a33448]
Zbudowana w ten sposób klasa obsłuży coś takiego:
[php:1:9c50a33448]<?php
$sql = new sql_db( 'localhost', 'splatch', 'splatch', 'splatch' );
$sql->query( 'SELECT * FROM teksty' );
while( $row = $sql->fetch_array( ) )
{
echo $row['pole'] .'<br>';
}
?>[/php:1:9c50a33448]
i obsłuży coś takiego
[php:1:9c50a33448]<?php
$sql = new sql_db( 'localhost', 'splatch', 'splatch', 'splatch' );
$x = $sql->query( 'SELECT * FROM teksty' );
while( $row = $sql->fetch_array( $x ) )
{
echo $row['tekst'] .'<br>';
$query = $sql->query( 'SELECT * FROM autorzy WHERE autor = "'. $row['autor'] .'"' );
if( $res2 = $sql->fetch_array( $query ) )
{
echo 'Autor '. $row2['nick'];
}
}
?>[/php:1:9c50a33448]
W tej klasie nie jest jeszcze wprowadzone zaawansowane sprawdzanie, czy dane z zapytania zostały wyświetlone itd., ale nic nie stoi na przeszkodzie, aby to zrobić.
Grzesiek
Powinienes poprawic klase counter, zeby wygladala tak:
[php:1:9b3224a53e]<?php
class counter extends MySQL
{
function counter()
{
$tmp = parent::query( $sql );
}
}

?>[/php:1:9b3224a53e]
..:: pingu ::..
ok czyli musze dziedziczyć oraz dać
[php:1:fec861da7b]<?php
parent::funkcja();
?>[/php:1:fec861da7b]
a jesli zrobie:
[php:1:fec861da7b]<?php
class mysql
{
var $x;
var $y
function foo{
echo $this->x;
}
}
class counter extends mysql
{
function foo{
echo parent::y;
}
}
class jakas_tam3 extends counter
{
}
?>[/php:1:fec861da7b]
to jak sie odwołac do początkowej funkcji w mysql ( chodzi o foo) questionmark.gif
parrent::foo ?
splatch
Jeśli użyjesz dziedziczenia możesz użyć:
[php:1:a91988da9b]<?php
$this->metoda_z_klasy_nadrzednej( $dane );
?>[/php:1:a91988da9b]
Nie ma potrzeby odwoływania się poprzez parent.

W twoim przykładzie może to być:
[php:1:a91988da9b]<?php
class mysql
{
var $x = 'lala';
var $y
function foo{
echo $this->x;
}
}

class counter extends mysql
{
function bar{
echo $this->foo();
echo $this->x;
}
}
?>[/php:1:a91988da9b]
dag
Cytat
Jeśli użyjesz dziedziczenia możesz użyć:
[php:1:802fa84663]<?php
$this->metoda_z_klasy_nadrzednej( $dane );
?>[/php:1:802fa84663]
Nie ma potrzeby odwoływania się poprzez parent.


Pod warunkiem, że w obecnej klasie, z której wywołujemy metodę nie ma metody o nazwie "metoda_z_klasy_nadrzednej", bo jeśli takowa będzie to przykryje metodę z klasy, z której dziedziczymy ;-) Trochę zagmatwałem, ale chyba zrozumiesz :-)
splatch
No tak dlatego metody we wcześniejszym fistingu mają różne nazwy smile.gif.
dag
Wiem, wiem tylko przypominałem o możliwości wystąpienia takiego przypadku ;-)
..:: pingu ::..
tylko jak sie odołam wewnątrz klasy counter do klasy funkcji w klasie mysql tak?
[php:1:84ca210efc]<?php
mysql::connect();
?>[/php:1:84ca210efc]
to jest to nie poprawnie?
bo w PHP5 widziałem gdzies taką możliwosc, a nie wiem czy występuje ona w PHP4
dag
mysql::connect() w ten sposób odwołujesz się do metody statycznej.
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.