<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


PHPでコンストラクタが何度でも呼べる件

あ…ありのまま 今 起こった事を話すぜ!
「PHPでコンストラクタ何回も呼べた」
な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった

新しく入ってきた子に教えてたんですよ。で、
「このコンストラクタってなんのためにあるんですか。普通の関数と何が違うんですか」
と聞かれたんで(なかなか賢い有望な子です)、たぶんいろんな理由でこの仕様が生まれたんだろうけど、僕が思うに一番便利というかこれがないと困るっていうのは、やっぱりコンストラクタ引数を利用してImmutableなオブジェクトを作れるっていうことかな。たとえば、


class MyClass {
private $name;
function __construct($name) {
$this->name = $name;
}

function getName() {
return $this->name;
}
}
こういうクラスを作ると、このクラスは生成-初期化時にname変数が設定された後は二度とnameを変えられないので、Immutable(変更できない)って呼ばれるんだよ。こういうクラスは他のソースコードから取り扱いが簡単になるので設計の複雑さを多少軽減する効果があるんだ。

と、教えていたのです。で、「じゃあ実演してみるね」と軽快に実行コードを作って

$a = new MyClass("Alice");
echo $a->getName(), "\n";
$a->__construct("Bob2");
echo $a->getName(), "\n";
「まさかこんな書き方はできないわけでさ」と言いながらッターン!とF5(実行)キーをタイプしたんです。

Alice
Bob

は?エラーじゃないの?

頭がどうにかなりそうだった…

おそろしいなPHP!まさかそういうことになってるとはな!PHPには色々驚かされてきたけれど、これもかなりの大ネタだったな!

コンストラクタってただの関数みたい。ただちょっとnewのときに自動で呼ばれるってだけで、あとは他の関数と何も変わらないよ。

っていうのは嘘で、こういう呼び方できるけど、うちの社内では絶対やっちゃダメだからね。絶対だよ!と教えましたとさ。


この記事に対するコメント

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/258-2cbc672a
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。