fork download
  1. <?php
  2.  
  3. class YobaORM {
  4. /**
  5.   * @param string $type_name
  6.   * @return object[]
  7.   */
  8. static function all($type_name) {
  9. echo 'YobaORM::all('.$type_name.')'.PHP_EOL;
  10. return array_map(
  11. function($id) use($type_name) {
  12. return new $type_name(array('id'=>$id));
  13. },
  14. range(1, 5)
  15. );
  16. }
  17.  
  18. /**
  19.   * @param string $type_name
  20.   * @param int $id
  21.   * @return object
  22.   */
  23. static function find($type_name, $id) {
  24. echo 'YobaORM::find('.$type_name.','.$id.')'.PHP_EOL;
  25. return new $type_name(array('id' => $id));
  26. }
  27. }
  28.  
  29. abstract class AbstractYobaEntity {
  30. /**
  31.   * @return static[]
  32.   */
  33. static function all() {
  34. return YobaORM::all(get_called_class());
  35. }
  36.  
  37. /**
  38.   * @param int $id
  39.   * @return static
  40.   */
  41. static function find($id) {
  42. return YobaORM::find(get_called_class(), $id);
  43. }
  44. }
  45.  
  46. class SomeYobaEntity extends AbstractYobaEntity {
  47. /**
  48.   * @var int
  49.   */
  50. protected $id;
  51. /**
  52.   * @var string
  53.   */
  54. protected $lal;
  55.  
  56. function __construct($ary = array()) {
  57. $this->id = isset($ary['id']) ? $ary['id'] : null;
  58. $this->lal = isset($ary['lal']) ? $ary['lal'] : '{{'.rand().'}}';
  59. }
  60.  
  61. /**
  62.   * @return int
  63.   */
  64. function getId() {
  65. return $this->id;
  66. }
  67.  
  68. /**
  69.   * @return string
  70.   */
  71. function getLal() {
  72. return $this->lal;
  73. }
  74. }
  75.  
  76. $y = SomeYobaEntity::find(3);
  77. echo $y->getId().','.$y->getLal().PHP_EOL;
  78.  
  79. $all_that_yobas = SomeYobaEntity::all();
  80. foreach ($all_that_yobas as $yo) {
  81. echo $yo->getId().','.$yo->getLal().PHP_EOL;
  82. }
  83.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
YobaORM::find(SomeYobaEntity,3)
3,{{1394772405}}
YobaORM::all(SomeYobaEntity)
1,{{664473283}}
2,{{42398298}}
3,{{254976954}}
4,{{336476305}}
5,{{1166166475}}