singletonメソッドがあるクラスはsingletonを呼びたいけどだめだった件
どっか配列にクラスメイト生成するインスタンス変数名を格納しておいて、それを使って一気にnewしたかった
んで、さらにsingletonメソッドが有る場合はそれを使ってインスタンスの生成をしたかった
やってみた
安直に想像して以下のようにやってみた
<?php foreach($class_array as $class_name => $instance_name){ if(method_exists($class_name, 'singleton')){ // singletonメソッドが有る場合はsingletonメソッドを利用する $$instance_name = $class_name::singleton(); }else{ // singletonメソッドが無い場合はnewする $$instance_name = new $class_name(); } }
おこられたw
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /var/www/html/class_new.php on line 1000
ちょっと改変
PHPのマニュアルページの以下のところをみたらevalでやっていたので変更
PHP: スコープ定義演算子 (::) - Manual
<?php foreach($class_array as $class_name => $instance_name){ if(method_exists($class_name, 'singleton')){ // singletonメソッドが有る場合はsingletonメソッドを利用する eval('$$instance_name = ' . $class_name . '::singleton();'); }else{ // singletonメソッドが無い場合はnewする $$instance_name = new $class_name(); } }
で、結局
PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。 変数の値に (self や parent、 static といった) キーワードを指定することはできません。
らしいので、素直に書くにはPHP5.3.0以上でないとだめらしい
<?php foreach($class_array as $class_name => $instance_name){ if(method_exists($class_name, 'singleton')){ // singletonメソッドが有る場合はsingletonメソッドを利用する // この書き方はPHP5.3.0以降でないと出来ない $$instance_name = $class_name::singleton(); // PHP5.3.0より前の場合はこうやって無理くりやるしかないみたい eval('$$instance_name = ' . $class_name . '::singleton();'); }else{ // singletonメソッドが無い場合はnewする $$instance_name = new $class_name(); } }