質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

552閲覧

関数の返り値について

newyee

総合スコア213

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/04/06 12:28

以前、こちらの質問でオブジェクト指向について、お聞きした際に頂いたご回答のコード内の部分について、分からない部分があった為ご質問させて貰いました。
以下は、頂きましたご回答の「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点につきまして、ご助言頂けましたら、幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s8_chu

2019/04/07 04:38

質問内容について解決されたのであれば、質問を解決済みにしていただけませんか?
newyee

2019/04/07 04:51

忘れていました。解決済みにしておきます。
s8_chu

2019/04/07 04:52

ありがとうございます。
guest

回答1

0

ベストアンサー

ご助言頂けましたら、幸いです。

new static 」がわからないなら、「 new static 」で検索してみましょう。同じ使い方をしている人や、解説をしている人がいるかもしれません。もし既に検索しているとしたら、それのどれを見て、どの部分がわからなかったのかを質問文に入れましょう。

【staticメソッド内でサブクラス自身を表す際にはselfではなくstatic - Qiita】
https://qiita.com/okunokentaro/items/9fc7cfd59abc05bab49a

【クラス内のメソッドで自身をnewするときはself、static、parentでいける - Qiita】
https://qiita.com/abusan/items/15cc8e62bf9cf8c554ce

【new self と new static の違い - Sarabande.jp】
https://blog.sarabande.jp/post/10539365200


「質問するときのヒント」は丁寧に書かれているので、再確認してみてください。

【質問するときのヒント|teratail(テラテイル)】
https://teratail.com/help/question-tips

投稿2019/04/06 18:23

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/04/07 01:48

ご回答ありがとうございます。 貼って頂きました、リンクを読ませて頂きました。 理解の確認の為、一点だけお聞きしたいことがあるのですが、仮に、createメソッドを呼び出す際に、 「$bbs = Bbs::create('mysql:host=localhost;dbname=online_bbs;charset=utf8', 'root', '', 10);」 このようにcreateメソッド内の引数を指定した場合、$bbsはBbsクラスのインスタンスになる、といった理解で合っていますでしょうか...?
kei344

2019/04/07 02:15

助言内容は提示したリンクではなく、「php インスタンス 確認」とかで検索しなさい、ということです。
newyee

2019/04/07 02:58

返信頂いたキーワードで調べましたら「instance of 」にて、特定のクラスのインスタンかを調べることができるということが、分かりました。 こちらの結果は「true」と出まして、Bbsクラスのインスタンスであることが分かりました。 しかし変数の中身を確認する為、「var_dump($bbs)」としましたら、 「object(Bbs)#2 (2) { ["dbh":"Bbs":private]=> object(PDO)#1 (0) { } ["num":"Bbs":private]=> int(10) }」このように表示されたのですが、こちらが何を表しているかが、分かりません。どのように検索すれば、説明されているページが引っかかりますでしょうか?
kei344

2019/04/07 03:04 編集

何がしたくて「変数の中身を確認」するんでしょうか。
newyee

2019/04/07 03:08 編集

インスタンス変数が保有している、変数、メソッドを確認する為です
kei344

2019/04/07 03:10

クラスを作っているのだから、クラス本来の方法でアクセスすればよいのでは? $bbs->numberOfPages() とかでアクセスできるでしょ。
newyee

2019/04/07 03:18

確かにそうなのですが、持っているメンバ一覧を表示させるという方法はないかなと思ったんですよね...
kei344

2019/04/07 03:22

ひとまず質問内容については解決されているのでは?
newyee

2019/04/07 03:26

そうですね。こちらは、+αな疑問ですし、新しく質問を立てるなどしてみようかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問