php使用反射插入对象示例分享

  

复制代码 代码如下:

  /**

  * 插入insertModel(),利用反射,效率稍差

  * @param class $model 对象

  * @param bool $is_returnLastInsertId 是否返回添加ID

  * @return int 默认返回成功与否,$is_returnLastInsertId 为true,返回添加ID

  */

  public function insertModel($model,$is_returnLastInsertId=FALSE) {

  try {

  require_once dirname(dirname(__FILE__)).'\Models\BaseModel.php';

  if(!is_subclass_of($model, "BaseModel")){

  exit($this->getError(__FUNCTION__, __LINE__));

  }

  $className=get_class($model);

  $tName = $this->formatTabName($className);

  $reflectionClass=new ReflectionClass($className);

  $properties=$reflectionClass->getProperties();

  unset($properties[0]);

  $fields="";

  $vals="";

  foreach ($properties as $property) {

  $pName=$property->getName();

  $fields.=$pName.",";

  $vals.='\''.$model->$pName.'\''.',';

  }

  $fields=rtrim($fields,',');

  $vals=rtrim($vals,',');

  $this->sql = "insert into {$tName} ({$fields}) values ({$vals})";

  if($is_returnLastInsertId){

  $this->conn->exec($this->sql);

  $lastId = (int)$this->conn->lastInsertId();

  return $lastId;

  }  else {

  $row = $this->conn->exec($this->sql);

  return $row;

  }

  } catch (Exception $exc) {

  echo $exc->getMessage();

  }

  }