以前、こちらの質問でオブジェクト指向について、お聞きした際に頂いたご回答のコード内の部分について、分からない部分があった為ご質問させて貰いました。
以下は、頂きましたご回答の「bbs_class.php」になります。
php
1class Bbs 2{ 3 private $dbh; 4 5 private $num; 6 7 protected function __construct($dbh, $num) 8 { 9 $this->dbh = $dbh; 10 $this->num = $num; 11 } 12 13 public static function create($dsn, $user, $password, $num) 14 { 15 $dbh = new PDO($dsn, $user, $password); 16 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 17 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 18 return new static($dbh, $num); 19 } 20 21 public function comments($page) 22 { 23 $stmt = $this->dbh->prepare("SELECT id,name,title,comment,created_at,password FROM post ORDER BY created_at DESC LIMIT :page,:num"); 24 $page = $page * $this->num; 25 $stmt->bindValue(':page', $page, PDO::PARAM_INT); 26 $stmt->bindValue(':num', $this->num, PDO::PARAM_INT); 27 $stmt->execute(); 28 while ($row = $stmt->fetch()) { 29 yield $row; 30 } 31 } 32 33 public function numberOfPages() 34 { 35 $stmt = $this->dbh->prepare("SELECT COUNT(*) FROM post"); 36 $stmt->execute(); 37 $comments = $stmt->fetchColumn(); 38 return ceil($comments / $this->num); 39 } 40 41 public function write($name, $title, $comment, $pass) 42 { 43 $stmt = $this->dbh->prepare("INSERT INTO post (name,title,comment,created_at,password) VALUES (:name, :title, :comment, now(), :pass)"); 44 $stmt->bindValue(':name',$name,PDO::PARAM_STR); 45 $stmt->bindValue(':title',$title,PDO::PARAM_STR); 46 $stmt->bindValue(':comment',$comment,PDO::PARAM_STR); 47 $stmt->bindValue(':pass',$pass,PDO::PARAM_STR); 48 $stmt->execute(); 49 } 50 51 public function delete($id, $pass) 52 { 53 $stmt = $this->dbh->prepare("SELECT password FROM post where id = :id"); 54 $stmt->bindValue(':id', $id, PDO::PARAM_INT); 55 $stmt->execute(); 56 $db_pass = $stmt->fetch(); 57 if(!password_verify($pass, $db_pass['password'])){ 58 throw new Exception('パスワードが違います'); 59 } 60 $stmt = $this->dbh->prepare("DELETE FROM post WHERE id = :id"); 61 $stmt->bindValue(':id', $id, PDO::PARAM_INT); 62 $stmt->execute(); 63 } 64}
上記のcreateメソッド内のこちら「return new static($dbh, $num);」返り値を記載している部分になります。
new演算子によるインスタンス化を行う際は、new の後にクラス名を記載するものだと認識していたのですが、こちらのような書き方は初めて目にしました。返り値としましては、createメソッドが記載されているBbsクラスのインスタンスが生成されるといった感じなのでしょうか?また、new演算子の後に、staticがついている理由も分かりません。
上記2点につきまして、ご助言頂けましたら、幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー