![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
z OOP jestem raczkujący napisałem klase okórej cześć zamieszczam poniżej. Znajdują sie tam 2 podobne funkcje, która z nich jest poprawna (chodzi o zapis zgodny z ideą OOP);
ps obie działąją poprawnie przy czym 2ga jest niewiele szybsza (testowane w pętli 1000 razy) [php:1:2b899e2e72]<?php class Db { function num_rows1($tabela,$pole,$warunek="") { if ($warunek=="") { $this->where = ""; } else { $this->where = " WHERE ".$warunek; } $this->zapytanie = "SELECT COUNT(".$pole.") FROM ".$tabela.$this->where; $this->rezultat = mysql_query($this->zapytanie); return mysql_num_rows($this->rezultat); } function num_rows2($tabela,$pole,$warunek="") { if ($warunek=="") { $where = ""; } else { $where = " WHERE ".$warunek; } $zapytanie = "SELECT COUNT(".$pole.") FROM ".$tabela.$where; $rezultat = mysql_query($zapytanie); return mysql_num_rows($rezultat); } } ?>[/php:1:2b899e2e72] |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 30.12.2003 Skąd: /earth/poland/gdansk Ostrzeżenie: (0%) ![]() ![]() |
pewnie ze szybsza. Po co zapisujesz zmienne do klasy w pierwszej funkcji? Co do poprawnosci: nie wszystkie zmienne musza byc w klasie. 2 funkcja wg mnie jest lepsza poniewaz nie robi zapisow do zmiennych w klasie.
BTW to nie trzeba czasem inicjowac zmiennych w klasie? e.g. [php:1:69a50d07d1]<?php class db{ var $xm; } ?>[/php:1:69a50d07d1] Pozdrawiam Edit: nie lepsza tylko szybsza |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.04.2003 Skąd: Żory / K-ce Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy śmiać się czy płakać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) A cóż to za idea OOP? Po prostu chodzi o to, aby każdy obiekt był za COŚ odpowiedzialny, a nie za wszystko na raz. Nie można powiedzieć, że coś zaprojektowałeś "dobrze" lub "źle", gdy pokazujesz jedną klasę. Ważny jest po prostu podział obowiązków, a nie co jak zapiszesz. Tak więc, nie jest ważne czy w środku metody napiszesz $where czy $this->where. To jest Twoja sprawa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ważne są metody i właściwości, ich nazwy i listy argumentów. Powinny być jak najbardziej intuicyjne. Tutaj tak nie ma, bo jak można zliczać wiersze w bazie danych? "Num_rows" znaczy mniej więcej "liczba wierszy", a wiadomo, że wiersze są w tabeli, a nie w bazie danych. A twoje zapytanie zlicza ilość wierszy z niepustymi polami (takie które nie są NULL) spełniającymi jakiś warunek. Jako potencjalny użytkownik Twojej klasy mi odrzuciłbym ją od razu, bo piszemy w OOP po to, aby później ułatwić sobie używanie tego kodu, a nie przeglądać kod klasy, aby dojść do tego co twórca klasy mógł mieć na myśli tak nazywając swoją metodę. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
chodziło mi wąłśnie o to czy this->where czy $where
Nalfein][WR co do mojej klasy jak dla mnie wydaje sie dobra, zlicza poprawnie przy czym działa szybciej niż: [php:1:6ea8e183fd]<?php $zapytanie = "SELECT * FROM ".$tabela.$where; $rezultat = mysql_query($zapytanie); return mysql_num_rows($rezultat); ?>[/php:1:6ea8e183fd] a pole wystarczy wybrać dowolne które wiemy że zawsze nie jest null np pole z auto_increment. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 19.11.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Daleko w tym przykładzie do OOP - OOP to nie sposób zapisu to cała metodologia tworzenia aplikacji. Jeśli chcesz zapoznać się z OOP polecam książke "Symfonia C++" (autor to chyba Jerzy Grębosz). Pomimo tego, że jest o C++ doskonale prezentuje koncepcję OOP i do tego dobrze się czyta.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.04.2003 Skąd: Żory / K-ce Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nalfein][WR co do mojej klasy jak dla mnie wydaje sie dobra, zlicza poprawnie przy czym działa szybciej niż:
[php:1:78c578bd18]<?php $zapytanie = "SELECT * FROM ".$tabela.$where; $rezultat = mysql_query($zapytanie); return mysql_num_rows($rezultat); ?>[/php:1:78c578bd18] Bo tu pobierasz wszystkie rekordy. Możesz tak: [php:1:78c578bd18]<?php $zapytanie = "SELECT COUNT(*) FROM ".$tabela.$where; $rezultat = mysql_query($zapytanie); return mysql_num_rows($rezultat); ?>[/php:1:78c578bd18] i będzie działało szybciej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:41 |