- ベストアンサー
関数の入れ子ができない。
はじめまして!php初心者です。 デフォルトではfunctionの入れ子はできないのでしょうか? <? //function test test(); function test(){ echo 'good!<br />'; test1(); function test1 () { echo 'test'; } } ?> これが動きませんでした。 Fatal error*: Call to undefined function test1() in /home/*/public_html/osamu/php/test.php* on line 8 ということでした。入れ子にしたfunctionが駄目らしいです。 <? //function test test(); function test(){ echo 'Omnioo!<br />'; test1(); } function test1 () { echo 'test'; } ?> こんな風に外に出してやる動きます。 機能的に一つの関数にまとめておきたい場合、関数の中に関数がある方が便利だと思うのですが、皆様はどうされているんでしょうか? ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
呼び出す前に定義すればいいでしょう <?php //function test function test(){ function test1 () { echo 'test'; } echo 'good!<br />'; test1(); } test();
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>デフォルトではfunctionの入れ子はできないのでしょうか? 基本的にはできません create_functionなどでやればできないとは言えませんが・・・ >機能的に一つの関数にまとめておきたい場合、関数の中に関数がある方が >便利だと思うのですが、皆様はどうされているんでしょうか? 機能の塊ということであればclass化すればよいでしょう。 そうすればライブラリとしてまとめることができます。
お礼
ありがとうございます。 PHPはすべての関数が(基本的には)同列のスコープなんですね。これまで殆どPerlで書いていたので、なかなか難しいです。。。 ありがとうございました。
補足
こ…こ…これは??なんと! ということは、基本的に関数はファイルの上にもってくる…というのがお手本通りということになるのでしょうか? これはPHP自身の読み込みの順番といいますか…、処理の順番の特性なんでしょうか?私はてっきり一度すべてメモリ上に読み込んでから処理をするものだと思っていました…。 しかし、これだとスクリプトの主人公が一番下になってしまいますよね?これはやむを得ないということなんでしょうか? あるいは、PHPで普段から何かしらのプログラムを走らせている方は、こんな風に書いているんでしょうか?(いえ、書き方はいろいろあっていいと思うのですが…)