クラス作ってるとときどき「継承する」じゃなくて「継承される」を宣言したいことがあるじゃん。「extended by ○○」って思わず書きたくなったり。
え? ない?
ってわけで作った。いつものrequire_onceのかわりにclassInclude() includeExtendedClass()と書くと、extended by句が使えます。
class hoge extended by piyo {
って作っといてなんだけど、ぜんぜんうれしくねーなしかし。
<?php
function includeExtendedClass($file) {
static $included;
if(!is_array($included)) $included = array();
if(in_array($file , $included)) {
return;
}
$included[] = $file;
$content = file_get_contents($file , true);
$content = preg_replace(
'/class\s+([a-zA-Z0-9_]+?)\s+extended\s+by\s+([a-zA-Z0-9_]+?)\s*\{/i'
, 'class $1 extends $2{'
, $content
);
$content = preg_replace(
'/function\s+([a-zA-Z0-9_]+)\s*(\(.*?\))\s*\{/i'
, 'function $1 $2{
$args = func_get_args();
$callback = array(\'parent\' , \'$1\');
if(is_callable($callback)) {
return call_user_func_array($callback , $args);
}
'
, $content
);
eval('?>' . $content . '<?php ');
}
?>
うーむいかん。本気で役にたたない(笑)
[2007.10.24 01:40]てらしま :
お。普通のクラスにはぜんぜん使えないじゃんこれ(気づけ)。だめじゃん。
ということでまぎらわしいから関数名を変更。
[2007.10.24 05:14]white :
仮に言語の構文として組み込めたとして、宣言したいタイミングが抽象クラス作るときぐらいしか思いつかないのだけれどどうなのよ。
要はコメントが書かれている状態に置いておきたいって話のように思うんだが。
[2007.10.24 20:20]てらしま :
いまちょっと考えても思いつかないくらいだし(笑)使わなきゃならない場面はないんじゃないかとは思いますが。