それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

php4系でFactoryメソッド

php4系ではコンストラクタで$thisが上書きできた

<?php
class B{
 function B(){
  ;
 }
}
class A {
 function A(){
  $this = new B();
 }
}

$a = new A();

var_dump($a);

?>

なんかFatctoryメソッドっぽいのでFactory関数の代わりにコンストラクタを使おうとしたら失敗した

PHP5では使えない

実行すると起こられる

Fatal error: Cannot re-assign $this in hoge.php line 14

もともとはコンストラクタ失敗を返すため

コンストラクタで$thisの上書きは便利だと思うのだがPHP5.xでは規制されてしまった。これはPHP5でExceptionがサポートされたからみたい。もともと$thisの上書きはコンストラクタが戻り値を返せないからだということ。そういえばJavaもそうだな。

<?php
class B{
 function B(){
  return;
 }
}
class A {
 function A(){
  $this = PEAR::raiseError("failed");
 }
}

$a = new A();

var_dump($a);

?>

PEAR::Errorってバッドノウハウで、PHP5では使わないと思うんだが。PEAR::ERRORを使ったコードと共存していくにはどういう方法がベターなんだろう。