phpオブジェクト指向トランザクションスクリプトモード

怪我咯
リリース: 2023-03-13 14:22:01
オリジナル
1483 人が閲覧しました

オブジェクト指向プログラミング (英語: Object-owned programming、略称: OOP) において、オブジェクトとは、情報とその情報を処理する方法の記述から構成される全体であり、現実世界を抽象化したものです。

現実の世界で私たちが直面しているのは、コンピューター、テレビ、自転車などの物体です。

オブジェクトの主な 3 つの特性:

オブジェクトの動作: オブジェクトにどのような操作を適用できるか、ライトをオンにするかライトをオフにするかが動作です。

オブジェクトの形状: メソッドが適用されたときのオブジェクトの反応、色、サイズ、外観。

オブジェクトの表現: オブジェクトの表現は、同じ動作や状態の違いを明確に区別するものです。

たとえば、Animal は

抽象クラス で、犬と羊を指定できます。犬と羊は色の属性を持ち、書き込み、実行、その他の行動状態を持ちます。

この記事では主にPHPのオブジェクト指向トランザクションスクリプトモードについて紹介します

/*
事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类。
个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够。
示例代码如下:

*/

namespace woo\process;

abstract class Base{
  static $DB;         //pdo对象
  static $stmts = array(); //sql语句句柄
  
  function construct (){
    $dsn = \woo\base\ApplicationRegistry::getDSN();
    if(is_null($dsn)){
      throw new \woo\base\AppException("No DSN");
    }
    self::$DB = new PDO($dsn);
    self::$DB->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION);
  }
  
  function prepareStatement($stmt_s){  //缓存sql语句句柄
    if(isset(self::$stmts($stmt_s)){
      return self::$stmts[$stmt_s];
    }
    $stmt_handle = self::$DB->prepare($stmt_s);
    self::$stmts[$stmt_s] = $stmt_handle;
    return $stmt_handle;
  }
  
  protected function doStatement($stmt_s,$values_a){  //执行sql并获取一个语句资源
    $sth = $this->prepareStatement($stmt_s);
    $sth->closeCursor();
    $db_result = $sth->execute($values_a);
    return $sth;
  }
}

//这个类就是向数据库中写入一些数据,比较简单没什么好多说的
class VenueManager extends Base{
  static $add_venue = "INSERT INTO venue (name) values(?)";
  static $add_space = "INSERT INTO space (name,venue) values(?,?)";
  static $check_slot = "SELECT id,name FROM event WHERE space = ? AND (start+duration)>? AND start <?";
  static $add_event = "INSERT INTO event (name,space,start,duration) values(?,?,?,?)";
  
  function addVenue($name,$space_array){
    $ret = array();
    $ret[&#39;venue&#39;] = array($name);
    $this->doStatement(self::$add_venue,$ret[&#39;venue&#39;]);
    $v_id = self::$DB->lastInsertId();
    $ret[&#39;spaces&#39;] = array();
    foreach($space_array as $space_name){
      $values = array($space_name,$v_id);
      $this->doStatement(self::$add_space,$values);
      $s_id = self::$DB->lastInsertId();
      array_unshift($values,$s_id);
      $ret[&#39;spaces&#39;][] = $values;
    }
    return $ret;
  }
  
  function bookEvent ($space_id,$name,$time,$duration){
    $values = array($space_id,$time,($time+$duration));
    $stmt = $this->doStatement(self::$check_slot,$values,false);
    if($result = $stmt->fetch()){
      throw new \woo\base\AppException("double booked! try again");
    }
    $this->doStatement(self::$add_event,array($name,$space_id,$time,$duration));
  }
}

//客户端,使用起来还是比较简便的
$venue = new VenueManager();
$venue->addVenue(&#39;test&#39;,array(&#39;test1&#39;,&#39;test2&#39;,&#39;test3&#39;));
ログイン後にコピー

以上がphpオブジェクト指向トランザクションスクリプトモードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート