[PHP-users 25764] Re: 関数内関数の正しい定義方法
鮫川 将人
masahito @ yk.rim.or.jp
2005年 6月 9日 (木) 17:26:55 JST
こんにちは。鮫川と申します。
> 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 メーリングリストの案内