[PHP-users 25767] Re: 関数内関数の正しい定義方法

鮫川 将人 masahito @ yk.rim.or.jp
2005年 6月 9日 (木) 17:39:04 JST


自己レスです。

誤りがありました。すみません。

誤 if (function_exists('bar')) {

正 if (!function_exists('bar')) {

ですね...

失礼しました。

----- Original Message ----- 
From: "鮫川 将人" <masahito @ yk.rim.or.jp>
To: "PHP-users ML" <php-users @ php.gr.jp>
Sent: Thursday, June 09, 2005 5:26 PM
Subject: [PHP-users 25764] Re: 関数内関数の正しい定義方法


> こんにちは。鮫川と申します。
>
> > Fatal error: Cannot redeclare bar() (previously declared in
> /home/www/hoge.php:4) in /home/www/hoge.php on line 3
> >
> > となって、外側の関数を2回呼ぶことで再定義エラーとなってしまいます。
>
> とのことですが、function_exists 関数を利用すれば回避できるのではないでしょ
う
> か。
>
> if (function_exists('bar')) {
>     function bar() {
>         ....
>     }
> }
>
> といった感じです。
>
> または、bar() の中で定数か何かを定義して、それが存在するかどうかを見るとい
う
> 判定方法もあると思いますが、PHPにビルトインされている function_exists が妥
当
> かと思います。使ったことはありませんが...
>
> お役に立てれば幸いです。
>
>
> ----- Original Message ----- 
> From: "Yusuke ITO" <ito_yusuke @ white.livedoor.com>
> To: <php-users @ php.gr.jp>
> Sent: Thursday, June 09, 2005 5:11 PM
> Subject: [PHP-users 25762] 関数内関数の正しい定義方法
>
>
> > 伊東です。いつもお世話になっております。
> >
> > 公式サイトのマニュアルに載っている、関数内関数ですが…
> > http://www.php.net/manual/ja/language.functions.php#AEN4977
> >
> > 以下のスクリプトを作成し(/home/www/hoge.phpとしましょう)、
> >
> > <?php
> >   function foo(){
> >     function bar(){
> >       echo('bar<br>');
> >     }
> >     bar();
> >   }
> >
> >   foo(); // ←1回目
> >   foo(); // ←2回目
> > ?>
> >
> > 呼び出しますと
> >
> > bar   ←1回目の出力
> >
> > Fatal error: Cannot redeclare bar() (previously declared in
> /home/www/hoge.php:4) in /home/www/hoge.php on line 3
> >
> > となって、外側の関数を2回呼ぶことで再定義エラーとなってしまいます。
> >
> > これだと全然使えないのですが…
> > 回避方法をご存じの方、いらっしゃいませんか?
> > #関数を外に出すのはナシでw
> >
> > 環境は
> >  Linux(Fedora Core)+Apache+PHP4.3.10
> > とか
> >  Windows+AN httpd+PHP4.3.11
> > とか、いくつか試して同じ現象です。
> >
> > 動作的には「バグ!」とまでは言いませんが…
> > イマイチ役に立たないなぁ…と。
> > #公式サンプルなのに。
> >
> > --
> > 伊東 祐介
> > ito_yusuke @ white.livedoor.com
> >
> >
> >
> >
> > -----------------------------------------------
> > 2GBまでメールや画像など貯め放題!さらに特典いっぱい♪
> > livedoor ギガメーラープラス 【新登場】
> > http://gigamailerplus.livedoor.com/
> >
> > _______________________________________________
> > PHP-users mailing list  PHP-users @ php.gr.jp
> > http://ns1.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://www.php.gr.jp/php/novice.php3
> >
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>



PHP-users メーリングリストの案内