ホーム > PHP + MySQL > PHP コンストラクタ(__construct)って何だよ

PHP コンストラクタ(__construct)って何だよ

コンストラクタとは
クラスにおいて、オブジェクトの生成時に呼び出される特殊な関数。
これにより、オブジェクトを使用する前に必要な初期化を行うことができる。

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

親クラスのコンストラクタを呼んで子クラスとともに表示してみた。

なんとか理解してきたよーな感じ。
むずかしー。

コメント: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 より

ホーム > PHP + MySQL > PHP コンストラクタ(__construct)って何だよ

検索
フィード
メタ情報
あと何日

今年の目標PHPを覚える

今日:2012-05-21
全体:366日間
経過:142日間
残日数:224日間
消化率:38.8%
ブログパーツ
킹ēǂ݂uOp[c
QRコード
QRR[h

ページの上部に戻る