<?php
class YobaORM {
/**
* @param string $type_name
* @return object[]
*/
static function all($type_name) {
echo 'YobaORM::all('.$type_name.')'.PHP_EOL;
function($id) use($type_name) {
return new $type_name(array('id'=>$id)); },
);
}
/**
* @param string $type_name
* @param int $id
* @return object
*/
static function find($type_name, $id) {
echo 'YobaORM::find('.$type_name.','.$id.')'.PHP_EOL;
return new $type_name(array('id' => $id)); }
}
abstract class AbstractYobaEntity {
/**
* @return static[]
*/
static function all() {
return YobaORM::all(get_called_class());
}
/**
* @param int $id
* @return static
*/
static function find($id) {
return YobaORM::find(get_called_class(), $id);
}
}
class SomeYobaEntity extends AbstractYobaEntity {
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $lal;
function __construct
($ary = array()) { $this->id = isset($ary['id']) ?
$ary['id'] : null; $this->lal = isset($ary['lal']) ?
$ary['lal'] : '{{'.rand().'}}'; }
/**
* @return int
*/
function getId() {
return $this->id;
}
/**
* @return string
*/
function getLal() {
return $this->lal;
}
}
$y = SomeYobaEntity::find(3);
echo $y->getId().','.$y->getLal().PHP_EOL;
$all_that_yobas = SomeYobaEntity::all();
foreach ($all_that_yobas as $yo) {
echo $yo->getId().','.$yo->getLal().PHP_EOL;
}
PD9waHAKCmNsYXNzIFlvYmFPUk0gewogICAgLyoqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICR0eXBlX25hbWUKICAgICAqIEByZXR1cm4gIG9iamVjdFtdCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBhbGwoJHR5cGVfbmFtZSkgewogICAgICAgIGVjaG8gJ1lvYmFPUk06OmFsbCgnLiR0eXBlX25hbWUuJyknLlBIUF9FT0w7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcCgKICAgICAgICAgICAgZnVuY3Rpb24oJGlkKSB1c2UoJHR5cGVfbmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAkdHlwZV9uYW1lKGFycmF5KCdpZCc9PiRpZCkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICByYW5nZSgxLCA1KQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICR0eXBlX25hbWUKICAgICAqIEBwYXJhbSAgIGludCAgICAgJGlkCiAgICAgKiBAcmV0dXJuICBvYmplY3QKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZpbmQoJHR5cGVfbmFtZSwgJGlkKSB7CiAgICAgICAgZWNobyAnWW9iYU9STTo6ZmluZCgnLiR0eXBlX25hbWUuJywnLiRpZC4nKScuUEhQX0VPTDsKICAgICAgICByZXR1cm4gbmV3ICR0eXBlX25hbWUoYXJyYXkoJ2lkJyA9PiAkaWQpKTsKICAgIH0KfQoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RZb2JhRW50aXR5IHsKICAgIC8qKgogICAgICogQHJldHVybiAgc3RhdGljW10KICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGFsbCgpIHsKICAgICAgICByZXR1cm4gWW9iYU9STTo6YWxsKGdldF9jYWxsZWRfY2xhc3MoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gICBpbnQgJGlkCiAgICAgKiBAcmV0dXJuICBzdGF0aWMKICAgICAqLwogICAgc3RhdGljIGZ1bmN0aW9uIGZpbmQoJGlkKSB7CiAgICAgICAgcmV0dXJuIFlvYmFPUk06OmZpbmQoZ2V0X2NhbGxlZF9jbGFzcygpLCAkaWQpOwogICAgfQp9CgpjbGFzcyBTb21lWW9iYUVudGl0eSBleHRlbmRzIEFic3RyYWN0WW9iYUVudGl0eSB7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkaWQ7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbGFsOwoKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhcnkgPSBhcnJheSgpKSB7CiAgICAgICAgJHRoaXMtPmlkID0gaXNzZXQoJGFyeVsnaWQnXSkgPyAkYXJ5WydpZCddIDogbnVsbDsKICAgICAgICAkdGhpcy0+bGFsID0gaXNzZXQoJGFyeVsnbGFsJ10pID8gJGFyeVsnbGFsJ10gOiAne3snLnJhbmQoKS4nfX0nOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiAgaW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldElkKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuICBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TGFsKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFsOwogICAgfQp9CgokeSA9IFNvbWVZb2JhRW50aXR5OjpmaW5kKDMpOwplY2hvICR5LT5nZXRJZCgpLicsJy4keS0+Z2V0TGFsKCkuUEhQX0VPTDsKCiRhbGxfdGhhdF95b2JhcyA9IFNvbWVZb2JhRW50aXR5OjphbGwoKTsKZm9yZWFjaCAoJGFsbF90aGF0X3lvYmFzIGFzICR5bykgewogICAgZWNobyAkeW8tPmdldElkKCkuJywnLiR5by0+Z2V0TGFsKCkuUEhQX0VPTDsKfQo=
YobaORM::find(SomeYobaEntity,3)
3,{{1394772405}}
YobaORM::all(SomeYobaEntity)
1,{{664473283}}
2,{{42398298}}
3,{{254976954}}
4,{{336476305}}
5,{{1166166475}}