コンストラクタ―について検索して調べると概ね以下のように説明されています。
----------------------------------
コンストラクタ
インスタンス生成時にオブジェクトを初期化したい場合にコンストラクタメソッドを使用できます。
コンストラクタメソッドは以下のように引数を指定する事もでき、インスタンス生成時に__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();
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
コンストラクタについてはその通りです。
同様に、デストラクタもオブジェクト参照が終了した段階で自動的に呼び出されます。(あまり使う機会はないかもしれませんが)
https://www.php.net/manual/ja/language.oop5.deco …
コンストラクタ、デストラクタとはそういうものです。
コンストラクタは、オブジェクトの操作を行う前に実施する既定動作を行うものです。
既定値の設定や、操作できるようにするための下準備など。
デストラクタは、参照しなくなったことによる後始末を行うものです。
クラス内で参照しているオブジェクトの解放など。
コンストラクタは、$textの値を自動的に保持するものではありません。
質問にあるコードは、ちゃんとインスタンス変数の$this->textに、$textを既定値として設定しています。
このコードでは、クラス内のtextを外側からは変更できないことになっているため、textはインスタンス化された時に決まらなければならず、後から変更することはできない、という位置づけになっています。
$textを引数として受け付けるコンストラクタがなかった場合、クラス内のtextを設定する契機はないことになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列とオブジェクトの違い
-
phpのクラスメソッドの定義が長...
-
「クラス関数」「メンバ関数」...
-
onedrive にexcelファイルをア...
-
こちらはただの直列処理ですか?
-
ワードプレス、Contact Form 7...
-
拡張子php画像をjpg画像等に変...
-
PHPとCSVで簡易データベースな...
-
include先でのinclude元の変数...
-
リダイレクト元のURLの取得方法...
-
メールフォームのタイトルが文...
-
php エラー
-
PHPのif文でその処理を途中で抜...
-
VBでメールを送る時のSMT...
-
one drive のアップロード失敗...
-
別PHPファイルに変数を渡す
-
ワードプレスサイト PHP8.0.25...
-
パースエラーとは?
-
Image Magickの関数が使えない
-
文字化けで混乱中です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスメソッドの定義が長...
-
ラッパークラスって何ですか?
-
'_'(アンダースコア)の使い方...
-
class定義のphpをファイル分割...
-
配列とオブジェクトの違い
-
PHP4、PHP5 1ファイル複数クラ...
-
関数定義の関数名の前にある&(...
-
php、可変プロパティ名について
-
クラス設計の良い参考書を教え...
-
phpのクラスにて別ファイルの変...
-
class.upload.phpの戻り値(返...
-
【PHP】クラス と 関数 の違い
-
php インスタンスとオブジェク...
-
Re: Cookieを使ってオブジェク...
-
PHPでサブクラスからスーパクラ...
-
クラス
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
おすすめ情報