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

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

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

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

Q&A

解決済

3回答

3552閲覧

コンストラクタでプロパティを設定できることの「便利さ」について

YO14

総合スコア45

PHP

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

0グッド

1クリップ

投稿2018/12/12 01:22

編集2018/12/12 06:40

質問

PHP

1Class Menu{ 2 public $name; 3 public function __construct($name){ 4 $this->name = $name; 5 } 6} 7 8$curry = new Menu('CURRY'); 9echo $curry->name; 10 11/*結果:CURRYが出力される

__constructメソッド内で、$thisを用いてインスタンスのプロパティに値をセットすることができます。
インスタンスの生成時にプロパティをセットすることができるので便利です。

という記述の、「便利です」の意味は、
「**インスタンス生成と同時にプロパティに値をセットできるので、インスタンス生成後にプロパティを設定するコードを書かずに済み、**便利です」という意味であっていますでしょうか。
つまり、
$curry = new menu();
$curry->name = 'CURRY';

と書く必要がなくなるよ、ということでしょうか。

また、コンストラクタを使用することで手間が減るなど、何かしら事例がありましたらご教示いただけると、
イメージしやすいので有難いです。

自分でClassを定義するような開発コードを書いたことがないので、その利便性がなかなか実感できず、
使いこなせていません。
詳しい方おられましたら、アドバイス宜しくお願いいたします。

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

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

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

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

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

m.ts10806

2018/12/12 01:25

コードはマークダウンのcode機能をご利用ください
m.ts10806

2018/12/12 01:27

「その通りです」のような同意のみの回答で良いのでしょうか。それともさらに突っ込んだ具体例も必要なのでしょうか。聞き方で答え方が決まってくるので自身が欲しい回答の方向性を分かりやすく示していただければと。
YO14

2018/12/12 06:31

ご回答ありがとうございます。 便利さを実感できる具体例をご教示いただけると、有難いです。
m.ts10806

2018/12/12 06:34

ではそのように質問を編集してください。
guest

回答3

0

どこで記載されているか分かりませんが、そのコードだとそれくらいしかメリットがありませんね。

ただ$nameがprivateで、そもそもsetterを用意したくないとか、__constructorで$this->nameを利用する別のプロパティやメソッドをコールしたいとか、便利になり得る局面は考えられると思います。

投稿2018/12/12 02:26

papinianus

総合スコア12705

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

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

YO14

2018/12/12 06:35

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

0

ベストアンサー

初期値として、「一度だけ設定しておきたいプロパティ」がある時に、余計なことを書かなくて良いので便利だと思います。(例えば、API の ID/Token とか)

setter で複雑なことをしなくても、インスタンス化する時にのみ実行されることが保証されるのは頭使わなくて良くて楽です。

投稿2018/12/12 02:01

編集2018/12/12 02:12
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

YO14

2018/12/12 06:35

>「一度だけ設定しておきたいプロパティ」がある時に、余計なことを書かなくて良いので便利だと思います。(例えば、API の ID/Token とか) 少しわかったような気がします。ありがとうございます。
guest

0

基本的にはご理解されている通りです。

補足として私が思うところだけ回答にします。
コンストラクタで設定するのはあくまで初期値という認識です。
データが変わることがある前提で、何かで何も設定されなかったときの対応として設定しておくイメージです。
初期値は設定しておくのであとは使う方でご自由にどうぞ、ということですね。
どう使われるかは感知できないので先に手を打っておく、と。

ただ、同じクラスを別々にインスタンス化したいときもあります。そういうときには利便性を実感できると思います。

よく例であるPersonクラスで言えば、田中さんと山田さんは別人ですし何の血縁もないですが、Personですし身長、体重といった個人データの項目は共通です。
でも個人データの内容は別個で違うのでインスタンス化を共通項目はコンストラクタで設定しておくような使い方ですね。
※いっそのことPersonクラスを親クラスとして継承したTanakaクラスとYamadaクラスを用意してもいいですが、それは要件次第ですし次の段階ということで

投稿2018/12/12 01:36

編集2018/12/12 01:47
m.ts10806

総合スコア80850

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

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

yoorwm

2018/12/12 01:53

それだと、オブジェクトが生成される時の条件を満たしていない場合はどうしますか?
m.ts10806

2018/12/12 02:13 編集

どのようなシーンを想定しているのかわからないので、もう少し具体例をだしていただいてよろしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問