- 2010/06/26 06:09
- PHP + MySQL
コンストラクタとは
クラスにおいて、オブジェクトの生成時に呼び出される特殊な関数。
これにより、オブジェクトを使用する前に必要な初期化を行うことができる。
PHPでコンストラクタを定義する場合、クラス名と同じメソッド名、あるいはPHP 5からは__constructメソッドとして記述する。
環境:php5
そんな感じでコンストラクタが分からなくてイロイロやってみた。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}$obj = new test1();
結果:コンストラクタされた
普通にコンストラクタされました。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}class test2 extends test1 {
public $msg;
public function __construct() {
$this->msg = ‘コンストラクタされた2′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}
}$obj = new test2();
結果:コンストラクタされた2
test1のコンストラクタ呼ばずにtest2が実行された。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}class test2 extends test1 {
public $msg;
public function msgbox() {
$this->msg = ‘コンストラクタされた2′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}
}$obj = new test2();
結果:コンストラクタされた
test1が呼ばれた。
test2でインスタンス化してるのになんでだよーと思ったけど。
多分、継承されてるからと思うしかないのだろう。
勉強したばかりで納得まだしてないけど使ってれば
分かると思うかな。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}class test2 extends test1 {
public $msg;
public function test2() {
$this->msg = ‘コンストラクタされた2′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}
}$obj = new test2();
結果:コンストラクタされた2
なぜだ!
__construct()が呼ばれるんじゃなくてtest2が呼ばれるんだよ!
調べたらphp4の時代のコンストラクタは、クラス名がコンストラクタみたい。
php5になっても使えるとのこと。
むむー。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}class test2 extends test1 {
public $msg;
public function __construct() {
$this->msg = ‘コンストラクタされた2′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}public function test2() {
$this->msg = ‘コンストラクタされた3′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}
}$obj = new test2();
結果:Strict Standards: Redefining already defined constructor for class test2 in ~ on line 17
ちょwエラーでたじゃまいか!
エラー調べたらコンストラクタが重複してるそーな。
エラー部分は、test2だった。
最初気づかなかったけど・・・思ったらクラス名と同じ。
test2の場所でコンストラクタが重複してると言う事か。
むむー。
<?php
class test1 {
public $memo;
public function __construct() {
$this->memo = ‘コンストラクタされた’;
echo mb_convert_encoding($this->memo, “SJIS”, “UTF-8″);
}
}class test2 extends test1 {
public $msg;
public function __construct() {
parent::__construct();
$this->msg = ‘コンストラクタされた2′;
echo mb_convert_encoding($this->msg, “SJIS”, “UTF-8″);
}
}$obj = new test2();
結果:コンストラクタされたコンストラクタされた2
親クラスのコンストラクタを呼んで子クラスとともに表示してみた。
なんとか理解してきたよーな感じ。
むずかしー。
- 正規表現:すべて半角カタカナかどうかチェックする方法
- 正規表現:全角カタカナが含まれていないかチェックする方法
この記事を読んだ人は次のエントリも読んでいます。
- 新しい: qrコード
- 古い: php スーパークラス 親クラス 基底クラス
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://seo.gunpla-rev.net/blog/php-mysql/php-%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf__construct%e3%81%a3%e3%81%a6%e4%bd%95%e3%81%a0%e3%82%88/trackback/
- トラックバックの送信元リスト
- PHP コンストラクタ(__construct)って何だよ - 携帯アフィリエイトで稼ぐアフィリエイトSEO より