Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 30th, 2012  |  syntax: None  |  size: 1.08 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. PDO::FETCH_CLASS with multiple classes
  2. $result->setFetchMode(PDO::FETCH_CLASS, 'myclass', array());
  3.        
  4. ID # name # age
  5. 1  # jon  # 12
  6. 2  # sue  # 23
  7. 3  # tom  # 24
  8.        
  9. /**
  10.  * Should not have any private, public or protected members in it's definition.
  11.  *
  12.  * Does only work for public properties.
  13.  */
  14. class ReturnObject {
  15.     public function getConcrete()
  16.     {
  17.         /* decide here which class */
  18.        $classname = 'Child'; // or 'Adult'
  19.  
  20.        return $this->selfAs($classname);
  21.     }
  22.  
  23.     private function selfAs($classname)
  24.     {
  25.         $l = strlen(__CLASS__);
  26.         $s = sprintf('O:%d:"%s"', strlen($classname), $classname).substr(serialize($this), 5+strlen($l)+$l);
  27.         $instance = unserialize($s);
  28.         $instance->__construct();
  29.         return $instance;
  30.     }
  31. }
  32.        
  33. SELECT
  34. id,
  35. name,
  36. age,
  37. CASE WHEN age < 21 THEN 'child'
  38. ELSE 'adult' END
  39. AS class_name
  40. FROM SOME_TABLE";
  41.  
  42. Then use your PDO::FETCH_ASSOC as fetch type
  43. Then when you loop over your results
  44. you can easily instantiave class based on
  45. $result['class_name'] like this:
  46. $class = $result['class_name'];
  47. $obj = new $class;