Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Casting na obiekt?
Forum PHP.pl > Forum > PHP
codo
Mam sobie troszke kodu:

  1. <?php
  2. class obj
  3. {
  4. //.... takie same membersy jak w nazwy kolumn w bazie danych
  5.  
  6. function display_object()
  7. {
  8.     echo&#092;"<pre>\";
  9.     print_r($this);
  10.     echo&#092;"</pre>\";
  11. }
  12.  
  13.  
  14. }
  15.  
  16. class db
  17. {
  18. //......
  19.  
  20. function query($query_string)
  21. {
  22.     if($this->connection)
  23.     {            
  24.     $row = array();    
  25.     $result = mysql_query($query_string); 
  26.     $i=0;
  27.     while($row[$i]= mysql_fetch_object($result)) $i++;            
  28.     $row[0]->display_object(); // -> Call to undefined function: display_object()
  29.     return $row; // returns an array of objs
  30.         
  31.     } else return NULL;    
  32.  
  33.  
  34. }
  35. }
  36. ?>

Oczywiscie jest problem przy
  1. <?php
  2.  $row[0]->display_object();
  3. ?>

Chcialbym zeby mysql_fetch_object zwracal mi obiekty typu obj. (przynajmiej o takich samych polach). Oczywiscie moge wyciagnac sobie z
  1. <?php
  2.  $row[$i] 
  3. ?>
konkretne pola i potem skopiowac je do nowego obiektu
  1. <?php
  2. new obj()
  3. ?>
, niestety obiekt typu obj ma ok 100 pol wiec reczne ich kopiowanie to udreka. Szukam sposobu zeby elegancko wyciagnac z bazy pola i odrazu wrzucic je obiektu (tablicy obiektow).

Bede bardzo wdzieczy za wszelkie wskazowki.
FiDO
Przenosze na php.
mike
Pisałem cos podobnego ( co zwracało obiekty ) kiedyś: [klasa] Sterownik Bazy danych, MySql.
Może Ci to pomoże, lub zainspiruje smile.gif
Kuziu
Nie wiem czy Cie dobrze rozumię ale skoro masz stworzoną klasę obj ... to dlaczego się odwołujesz do $row questionmark.gif
  1. <?php
  2.  
  3. $row[0]->display_object();
  4.  
  5. ?>

Jak to ma zadziałać skoro sie odwołujesz do obiektu $row[0] ... czyli jednego wiersza z MySQL'a i chcesz żeby on wykonał funkcję questionmark.gif

Chyba raczej powinieneś w funkcji zawrzeć parametr:
  1. <?php
  2.  
  3. function display_object($object){
  4. echo('<pre>' . $object . '</pre>');
  5. }
  6.  
  7. ?>

I wywoływać go tak:
  1. <?php
  2.  
  3. $this->display_object($row[0]);
  4.  
  5. ?>
codo
Dziekuje za Wasze odpowiedzi. Znalazlem odpowiedz na swoje pytanie na php.net.
  1. <?php
  2.  
  3. function query($query_string) // returns array of 'obj' objects that contain info from database
  4. {
  5. if($this->connection)
  6. {
  7.  $objects = array();
  8.  $result = mysql_query($query_string);
  9.  $i=0;
  10.  while( $row = mysql_fetch_assoc($result))
  11.  {  
  12. /* Create the object */
  13. $o =& new obj(NULL);
  14.  
  15. /* Explode the array and set the objects's instance data */
  16. foreach($row as $key => $value) $o->{$key} = $value;
  17. array_push($objects,$o);
  18.  
  19.  }
  20. return $objects;
  21. } else return NULL;
  22. }
  23.  
  24. ?>

I dziala. Robi to co ma czyli wyciaga z bazy dane i kazdy wiersz jest wrzucany do obiektu typu obj. Zaleta taka ze moge korzystac z metod tego obiektu a nie zwracac mysql_fetch_object ktore (chyba) nie ma zadnych metod.

Jeszcze raz dzieki i pozdrawiam.
nospor
Skoro tobie chodziło o pobranie wszystich wyników zapytań to wystarczyła tablica dwu wymiarowa. Poco w to mieszać obiekty.
  1. <?php
  2.  
  3. function query($query_string) // returns array of 'obj' objects that contain info from database
  4. {
  5. if($this->connection)
  6. {
  7.  $retArray = array();
  8.  $result = mysql_query($query_string);
  9.  $i=0;
  10.  while( $row = mysql_fetch_assoc($result))
  11.  {  
  12. $retArray[$i]=array();
  13. foreach($row as $key => $value) $retArray[$i][$key] = $value; $i++;
  14.  
  15.  }
  16. return $retArray;
  17. } else return NULL;
  18.  
  19. ?>
codo
Cytat
Skoro tobie chodziło o pobranie wszystich wyników zapytań to wystarczyła tablica dwu wymiarowa. Poco w to mieszać obiekty.


Poto zeby wykonywac na nich metody a nie funkcje winksmiley.jpg
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.