![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 15.12.2003 Skąd: Mikołów Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- Workshop: FC2/WinXp SP1 | Apache 2.0.50 | PHP 5.00 | MySQL 4.0.20 | Zend Studio 3.5 :)
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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ć. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 96 Pomógł: 3 Dołączył: 15.04.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Powinienes poprawic klase counter, zeby wygladala tak:
[php:1:9b3224a53e]<?php class counter extends MySQL { function counter() { $tmp = parent::query( $sql ); } } ?>[/php:1:9b3224a53e] -------------------- Linux is like wigwam, no windows, no gates and an apache inside.
Mój blog łebmasterski (po angielsku) Web Development Blog. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 15.12.2003 Skąd: Mikołów Ostrzeżenie: (0%) ![]() ![]() |
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) ![]() parrent::foo ? -------------------- Workshop: FC2/WinXp SP1 | Apache 2.0.50 | PHP 5.00 | MySQL 4.0.20 | Zend Studio 3.5 :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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] |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 0 Dołączył: 24.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
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 :-) |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No tak dlatego metody we wcześniejszym fistingu mają różne nazwy
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 0 Dołączył: 24.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, wiem tylko przypominałem o możliwości wystąpienia takiego przypadku ;-)
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 15.12.2003 Skąd: Mikołów Ostrzeżenie: (0%) ![]() ![]() |
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 -------------------- Workshop: FC2/WinXp SP1 | Apache 2.0.50 | PHP 5.00 | MySQL 4.0.20 | Zend Studio 3.5 :)
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 0 Dołączył: 24.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
mysql::connect() w ten sposób odwołujesz się do metody statycznej.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.06.2025 - 02:22 |