• 締切済み

インスタンスとコンストラクタ

たまの身長は80cm、体重は30kgです。と表示されるようにするには何を追加すればいいですか? // この下に記述するの下に、 $toraneko = new Cat('たま', 80, 30); $toraneko->show(); function __construct($name, $height, $weight) { $this->name = $name; $this->height = $height; $this->weight = $weight; を追加しても表示されませんでした。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php // Catクラス定義 class Cat { public $name; public $height; public $weight; function show() { print "{$this->name}の身長は{$this->height}cm、体重は{$this->weight}kgです。 <br>"; } } // この下に記述する ?> </body> </html>

みんなの回答

回答No.2

$thisは自分自身です。 例えば。。 $toraneko1 = new Cat('たま', 80, 30); $toraneko2 = new Cat('たま', 80, 30); と2個インスタンスを作った場合、 Catのクラスの中でどう区別すればいいですか? という問題です。 $toraneko1->show(); この中の、$thisは$toraneko1ですが、 $toraneko2->show(); この中の、$thisは$toraneko2です。 そうしないとnewで作られるまで実態を持っていないクラスは 自分自身を表せないでしょ。

回答No.1

実際にやってみましたが。 普通に動作しましたよ。 なので、原因はこの質問が「全文」書かれていなかったことが原因かもしれません。 後、PHPもちゃんとしたデバッガーで開発するほうが速いですよ。 (ここは、好みで^^) public $nameは private $nameの方がいいかと。 せっかくのセッターであるコンストラクタがもったいないですからね。 ってことで、書かれているソースで実行できます!。 が回答です。

OBAKEI
質問者

補足

$thisの意味がよくわかりません。本には「レシーバーと呼ばれるインスタンスが入っている」と書いてありましたが理解できませんでした。