オンライン健康相談、gooドクター

コンストラクタ―について検索して調べると概ね以下のように説明されています。
----------------------------------
コンストラクタ
インスタンス生成時にオブジェクトを初期化したい場合にコンストラクタメソッドを使用できます。
コンストラクタメソッドは以下のように引数を指定する事もでき、インスタンス生成時に__construct()が自動的に実行されます。
----------------------------------

イマイチ判然としません。

「newによってインスタンスを作成される時に自動的に呼び出されるもの」と自分では解釈していました。
例えば以下のような場合

public function __construct($text)
{
$this->text = $text;
}

【$text】の値をnewされることによって自動的に「保持」されるということなのでしょうか?
実際に表示させるときは【$posts[0]->show();】(show()メソッド)で表示させるわけですよね?

その上には【private $text;】でプロパティがあります。

ごく基本的な質問かと思いますが、【public function __construct($text)】
コンストラクタ―を作成する理由がよくわかりません。

初学者でも分かりやすいように解説していただけないでしょうか?
宜しくお願い致します。



<記述サンプル>
-------------------------------

<?php

class Post
{
private $text;

public function __construct($text)
{
$this->text = $text;
}

public function show()
{
printf('%s' . PHP_EOL, $this->text);
}
}

class SponsoredPost extends Post
{
private $sponsor;

public function __construct($text, $sponsor)
{
parent::__construct($text);
$this->sponsor = $sponsor;
}

public function showSponsor()
{
printf('%s', $this->sponsor);
}
}

$posts = [];
$posts[0] = new Post('hello');
$posts[1] = new Post('hello again');
$posts[2] = new SponsoredPost('hello hello', 'Yahoo');

$posts[0]->show();
$posts[1]->show();
$posts[2]->show();
$posts[2]->showSponsor();

gooドクター

A 回答 (1件)

コンストラクタについてはその通りです。


同様に、デストラクタもオブジェクト参照が終了した段階で自動的に呼び出されます。(あまり使う機会はないかもしれませんが)
https://www.php.net/manual/ja/language.oop5.deco …

コンストラクタ、デストラクタとはそういうものです。
コンストラクタは、オブジェクトの操作を行う前に実施する既定動作を行うものです。
既定値の設定や、操作できるようにするための下準備など。
デストラクタは、参照しなくなったことによる後始末を行うものです。
クラス内で参照しているオブジェクトの解放など。

コンストラクタは、$textの値を自動的に保持するものではありません。
質問にあるコードは、ちゃんとインスタンス変数の$this->textに、$textを既定値として設定しています。
このコードでは、クラス内のtextを外側からは変更できないことになっているため、textはインスタンス化された時に決まらなければならず、後から変更することはできない、という位置づけになっています。
$textを引数として受け付けるコンストラクタがなかった場合、クラス内のtextを設定する契機はないことになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング