Programowanie obiektowe
Re: Programowanie obiektowe
Wyślij dwa argumenty do funkcji wybierzZapytanie, a funkcje tworzZapytanieSelectAll stwórz gdzie indziej przyjmując tylko jeden argument. W funkcji wybierzZapytanie wywołaj funkcję twórzZapytanieSelectAll wysyłając jej jeden argument.
-
- Zaawansowany
- Posty: 223
- Dołączył(a): niedziela, 11 marca 2012, 03:08
- Lokalizacja: Poland
- Contact:
Re: Programowanie obiektowe
Code: Zaznacz cały
function createQuery($table, $column, $type)
{
$result = (mysql_query("SELECT ".$column." FROM ".$table));
if($column == "*")
{
if($type == "assoc")
while($row = mysql_fetch_assoc($result))
{
foreach($row as $key => $value)
{
echo $key.": ".$value."<br />";
}
echo "<br /><br />";
}
else if($type == "array")
{
$k=1;
while($row = mysql_fetch_array($result))
{
for($i=0; $i<=0; $i++)
{
echo $k++."<br />";
$max = (count($row)/2)-1;
for($j=1; $j<=$max; $j++)
{
echo $row[$j]."<br />";
}
}
echo "<br /><br />";
}
}
}
else
{
while($row = mysql_fetch_array($result))
{
echo $column.": ".$row[$column]."<br />";;
}
}
}
function chooseQuery($id, $table, $column="*", $type="assoc")
{
if($id == 1)
{
createQuery($table, $column, $type);
}
}
chooseQuery(1, "users"); //wyswietl mi cala tablice users, * - jest domyslnie ustawione, assoc - jest domyslnie ustawione jako wypisanie
chooseQuery(1, "users", "*", "array"); //wypisz mi wszystko z users w postaci array, dlatego że chce numerowac po kolei, a nie po ID, które mogłyby być różne
chooseQuery(1, "users", "login"); //wypisz mi wszystkie loginy z users
$max = (count($row)/2)-1; - ilość elementów w tabicy od $row = mysql_fetch_array($result), która dubluje elementy dodając asocjacyjne dlatego znak dzielenia, a minus 1 to, że zawsze w tablicach zaczynam od 0
EDIT: zamieniając na: while($row = mysql_fetch_array($result, MYSQL_NUM)), nie trzeba będzie dzielić przez 2, bo standardowo musi nadawać MYSQL_BOTH, dlatego jest 2x wiecej wyników
Nie chciałem zrobić więcej funkcji, ale mniej więcej to tak będzie wyglądać, gdzie możemy sobie naprawdę oszczędzić kodu na naszej stronie a te funkcje trzymać np. w klasie queries.
Z głównej funkcji chooseQuery wybieramy postać naszego zapytania, stworzyłem tylko jeden typ zapytania, do którego możemy przypisać wypisywanie wszystkich elementów (assocjacyjnie z id, tablicowo uporządkowanie po $k++ (w przypadku asocjacyjnego może zaistnieć przypade, że nie będzie po kolei np. w razie usunięcia jakiegoś rekordu, dlatego zrobiłem dla array)) lub też po jednej kolumnie.
Wystarczy jedna linijka kodu, aby całe zapytanie było zrobione. Oczywiście można zrobić takich rodzajów funkcji więcej np. dla 2 kolumn oraz je kolorować, upiększać w postaci tabelek itp. Wszystko zależy komu co będzie potrzebne i jak będzie wykorzystywał. Możecie sobie ulepszać tę funkcję, dowolnie.
Zawsze walcz do końca i nigdy się nie poddawaj!
-
- Zaawansowany
- Posty: 223
- Dołączył(a): niedziela, 11 marca 2012, 03:08
- Lokalizacja: Poland
- Contact:
Re: Programowanie obiektowe
Zrobiłem jeszcze jedną opcjonalną funkcję, która nam zwraca tablicę, do której odwołujemy się na zewnątrz i możemy się z nią bawić jak chcemy. Co sądzisz o tym? Czy w mniej więcej taki sposób to się robi obiektowo?
Code: Zaznacz cały
class SelectQuery
{
public $tab = array();
public function selectAll($table)
{
$result = (mysql_query("SELECT * FROM ".$table));
while ($row = mysql_fetch_assoc($result))
{
$this->tab[] = $row;
}
return $this->tab;
}
}
$query = new SelectQuery();
$query->selectAll("users");
echo "<table style='background-color: black; color: white'>";
for($i=0, $max=count($query->tab); $i<=$max-1; $i++)
{
echo "<tr>";
foreach($query->tab[$i] as $key => $value)
{
echo "<td>".$key.": ".$value."<td/>";
}
echo "</tr>";
}
echo "</table>";
Zawsze walcz do końca i nigdy się nie poddawaj!
Re: Programowanie obiektowe
Tak oto chodzi 

-
- Zaawansowany
- Posty: 223
- Dołączył(a): niedziela, 11 marca 2012, 03:08
- Lokalizacja: Poland
- Contact:
Re: Programowanie obiektowe
Z punktu widzenia do czego może się przydać destruktor to na pewno do zamykania połączeń mysql jeśli chcielibismy je tworzyc, zadawac zapytanie i zamykac polaczenie. Jednka linijka mniej.
1. Do czego jest on jeszcze przydatny (destruktor)?
2. Czy opłaca się zwalniać pamięc, czyli usuwać obiekt unsetem, kiedy wiem, że już go nie będziemy używać?
Stworzyłem gierkę dzięki, której sam sobie troszkę odpowiedziałem na 1 punkcik (ale jak ktoś wie gdzie można go fajnie wykorzystać to mówcie):
1. Do czego jest on jeszcze przydatny (destruktor)?
2. Czy opłaca się zwalniać pamięc, czyli usuwać obiekt unsetem, kiedy wiem, że już go nie będziemy używać?
Stworzyłem gierkę dzięki, której sam sobie troszkę odpowiedziałem na 1 punkcik (ale jak ktoś wie gdzie można go fajnie wykorzystać to mówcie):
Code: Zaznacz cały
class Score
{
private $points;
private $name;
public function __construct($name)
{
$this->points = 0;
$this->name = $name;
}
public function __destruct()
{
echo "Nice ".$this->name.". You gained: ".$this->points." points.";
}
public function addPoints($howMany)
{
$this->points += $howMany;
}
public function deletePoints($howMany)
{
$this->points -= $howMany;
}
}
$game = new Score("Lucas");
$game->addPoints(12);
$game->addPoints(7);
$game->deletePoints(4);
$game->addPoints(2);
$game->deletePoints(14);
Zawsze walcz do końca i nigdy się nie poddawaj!
Re: Programowanie obiektowe
2. Tak i tu możesz korzystać z destruktora, destruktor służy do sprzątania.
-
- Zaawansowany
- Posty: 223
- Dołączył(a): niedziela, 11 marca 2012, 03:08
- Lokalizacja: Poland
- Contact:
Re: Programowanie obiektowe
Czyli wystarczy nawet jak zrobię funkcję destruktora, która będzie pusta i ona będzie sprzątać? Bo destruktor występuje na samym końcu uzycia jakiejs cechy lub funkcji do obiektu, a unsetem to całkowice kasowałbym obiekt i nie mógłbym się już do tego obiektu odnieść. Albo destruktor albo unset, albo może to i to? 

Zawsze walcz do końca i nigdy się nie poddawaj!
Re: Programowanie obiektowe
Pusty destruktor nic nie robi.