simpleOrm.php 
                                                    
                        
                    
                    
  
                    
                    使用php魔术方法__callStatic实现一个简单的ORM模型
<?php
abstract class ActiveRecord
{
    protected static $table;
    protected $fieldvalues;
    public $select;
    static function findById($id)
    {
        $query = "select * from " . static::$table . " where id = $id";
        return self::createDomain($query);
    }
    public function __get($fieldname)
    {
        return $this->fieldvalues[$fieldname];
    }
    static function __callStatic($method, $args)
    {
        $field = preg_replace('/^findBy(\w*)$/', '${1}', $method);
        $query = "select * from" . static::$table . " where $field = '$args[0]'";
        return self::createDomain($query);
    }
    private static function createDomain($query)
    {
        $klass = get_called_class();
        $domain = new $klass();
        $domain->fieldvalues = array();
        $domain->select = $query;
        foreach ($klass::$fields as $filed => $type) {
            $domain->fieldvalues[$filed] = 'TOTD: set from sql result';
        }
        return $domain;
    }
}
class Customer extends ActiveRecord
{
    protected static $table = 'custdb';
    protected static $fields = array(
        'id' => 'int',
        'email' => 'varchar',
        'lastname' => 'varchar'
    );
}
class Sales extends ActiveRecord
{
    protected static $table = 'salesdb';
    protected static $fields = array(
        'id' => 'int',
        'item' => 'varchar',
        'qty' => 'varchar'
    );
}
echo Customer::findById(123)->email;
echo "<br>";
echo Customer::findById(123)->select;
echo "<br>";
echo Sales::findById(123)->select;
echo "<br>";
echo Customer::findByLastname('Denoncourt')->select;
使用魔术方法__call()实现一个简单的链式操作
class NewString
{
    public $value;
    public function __construct($value)
    {
        $this->value = $value;
    }
    public function __call($name, $arguments)
    {
        array_unshift($arguments, $this->value);
        $this->value = call_user_func_array($name, $arguments);
        return $this;
    }
}
$newString = new NewString(111111);
$newString->trim()->strlen();
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           boring 的个人博客
 boring 的个人博客
         
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: