• ベストアンサー

spl_autoload_registerについて

PHPのspl_autoload_registerについて、2つ教えてください ■質問1 ・(func1の中で複数処理するのではなく)この関数自体を2つ書いても良い? ・その場合、後から書いた方が優先される? spl_autoload_register(func1()); spl_autoload_register(func2()); ■質問2 ・spl_autoload_registerで登録しているパスを確認する方法は? ・get_include_pathみたいに、読み込むよう設定されているパスを確認したい

  • re97
  • お礼率80% (601/744)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

■ 回答1 PHP Manual - spl_autoload_register http://php.net/manual/ja/function.spl-autoload-register.php マニュアルにちゃんと書いてあります。 「複数の autoload 関数が必要となる場合でも spl_autoload_register() は対応できます。この関数は autoload 関数のキューを作成し、 定義された順にそれを実行していきます。」 キューとスタック http://flute.u-shizuoka-ken.ac.jp/~s-okubo/class/language/t006.htm 今回はキューなので、「定義順」となっています。 【回答2】 PHP Manual - spl_autoload_functions http://php.net/manual/ja/function.spl-autoload-functions.php PHPにはいろいろなコールバック指定方法がありますが、登録したときと同じように返してくれるみたいです。 http://ideone.com/9kX2Uy

re97
質問者

お礼

回答ありがとうございました。 >spl_autoload_functions ・気が付きませんでした ・リンク付きで、説明分かりやすかったです ・大変参考になりましたー

関連するQ&A

  • ZenCartのインストールができません

    共用サーバーにZenCartをインストールしようとしています。 MySQLデータベースは、サーバー標準のものを利用、データベースはONになっています。 ZenCartのバージョンは、v1.3.0.2日本語版です。 インストールで、システム検査は、すべてグンリーンのチェックとなります。 データベース設定で、「データベース設定の保存」ができず、すすむことができません。(エラー表示等はありません。) データベースパスワードを入力しないと、データベースに接続できないというエラーが出るので、データベースには、接続できているようです。 サーバーのエラーログには、以下の内容が残っております。 PHP Warning: include(/includes/classes/class.base.php): failed to open stream: No such file or directory in /(中略)/includes/autoload_func.php on line 59 PHP Warning: include(): Failed opening '/includes/classes/class.base.php' for inclusion (include_path='.:/usr/lib64/php/pear') in /(中略)/includes/autoload_func.php on line 59 PHP Warning: include(/includes/classes/class.notifier.php): failed to open stream: No such file or directory in /(中略)/includes/autoload_func.php on line 59 PHP Warning: include(): Failed opening '/includes/classes/class.notifier.php' for inclusion (include_path='.:/usr/lib64/php/pear') in /(中略)/includes/autoload_func.php on line 59 PHP Fatal error: Class 'notifier' not found in /(中略)/includes/autoload_func.php on line 78 どこをどのようにすれば、解決できるのか、ご教示いたければありがたいです。よろしくお願いします。

  • phpのregister_globalsについて

    xamppのPHP5.6.3で、register_globalsを有効にする方法がありましたらご教授ください。 なぜ、有効にする必要があるかと言いますと 参考にしている書籍(少々古いのですが)の環境はPHP4.3.11で、register_globalsを有効にしたサンプルがあるためです。 下記のような有効/無効にした例があります。 現在の私の環境では、2は表示されますが1はエラーとなります。 <? // login.php ?> <html> <body> 1:<?= $login ?><br> 2:<?= $_GET['login'] ?><br> <form action="login.php" method="get"> <input type"hidden" name="login" value="ログインします"> <input type="submit"> </form> </body> </html> 色々と調べてはみたのですが・・・ htdocs内に.htaccessで php_flag register_globals on にする方法を試してみましが、1はエラーで表示されます。 やり方が悪いのか、根本的に別の問題かわからず困っております。 xamppの古いバージョンを入れ直さずに動作確認できる方法がありましたら、よろしくご教授のほど、お願いします。

    • ベストアンサー
    • PHP
  • extern指定子と実装(#include)について

    2点質問があります。 #1.#includeできるのはヘッダーファイルのみなのでしょうか。    ヘッダファイルをインクルードしなくてはいけないのは、わかっ   てます。.c(Cソースコード)はインクルードできないのでしょう   か。 #2.#1と絡んだことについてです。    たとえば、2つの関数Func1()とFunc2()とをメインルーチンと   は別のソースコードに関数の処理を記述したとします。    ファイル名:Func.c    中身:Func1とFunc2の処理内容    次にこれをメインルーチン内で使用するために以下のように記述   して保存したとします。    ファイル名:Func.h    中身:#include "Func.c" extern void Func1(void); extern void Func2(void); 最終的に、ファイル名:main.c         #include "Func.h" --------------- Func1(); Func2(); というようなことは可能でしょうか。

  • register_globalや$$という変数について・・・

    PHPの勉強を始めて2週間足らずの初学者です。 質問させていただきます。 環境はwindowsXP+xampp+PHP5.2です。 現在、やや古めのPHP書籍のサンプルを試しています。 register_globals=Onの状態では、問題なく動作しました。 しかし、Offにすると反応しない部分があります。 test.phpにてsupport.phpをincludeしているのですが、 以下の箇所をそれぞれregister_globals=Off用に書き換える知恵が ありません。ほんの一部のみの抜粋にて恐縮ですがご査収願います。 ---「test.phpの一部」----------------------------------------- echo '<INPUT TYPE="radio" NAME="',$name,'"VALUE="',$kaitoubango,'">',"$val\n<br />";} ---「support.phpの一部」-------------------------------------- $kaitoubango++; $name = $kaitoubango; $val = $$name; -------------------------------------------------------------- 繰り返しになりますが、register_globals=Onの状態では、問題なく動作しましたが、Offでこの状態でフォームアクションしても$val = $$name;に値がありません。 「support.php」の$$nameを$_POST['name']に変更すれば、可能かと思いましたが、ダメでした。 なお、部分的な質問になりますが、 (1)「test.php」のNAME="',$name,'"VALUE="',$kaitoubango,'"ですが、 何故、NAME="$name" VALUE="$kaitoubango"でないのでしょうか? 「',」は何を意味しているのでしょうか? (2)「support.php」の$$nameという変数ですが、$が2つ連続した変数は今のところ、初めて見ました。これはどういう意味なのでしょうか? お詳しい方がおられましたら、何卒アドバイスのを頂戴できればと思います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのrequirについてe

    php初心者です。 同じような処理をまとめて、関数にしました。 debug中なので、function()ひとつに ひとつのphpファイル名をつけています。 あとで合体するつもりで。 当然、requireの数が複数になっていますが、requireの行(冒頭)でエラーになってしまいました。 echoで1行ずつ表示して確認しました。原因がわからず順番を変えたりpath指定を変更したりしたのですが、読み込んでくれません。 なので、処理直前で必要な関数を読み込むようにしたりもしたのですが 冒頭で require (dirname(__FILE__)."/include/******.inc"); require (dirname(__FILE__)."/include/******chk.php"); require (dirname(__FILE__)."/../include/******m.inc"); require (dirname(__FILE__)."/m******.php"); require (dirname(__FILE__)."/m******andom.php"); require (dirname(__FILE__)."/m******time_client.php"); require (dirname(__FILE__)."/error_******.php"); require (dirname(__FILE__)."/log******.php"); まではクリアできました。 (path指定が混ざってますがいろいろ試したので。。。) で、ある関数を呼ぶ直前に require (dirname(__FILE__)."/lfunc*****.php"); としたのですが /lfunc*****.php に飛ばないんです。 (echoが出ない) こういうのはどのような原因があるのでしょうか? ちょっと思ったのですが、何か重複してるのでしょうか? 似たような変数名が多くなってますが、requireした中のfunctionの中なら 別の変数として扱われますよね? 一応構文チェックなどはちゃんと no シンタックスエラーを確認しています。 ログにもかかれないし。 すみません、php初心者にアドバイスお願いします。

    • ベストアンサー
    • PHP
  • [Smarty] register_objectでの配列の扱い

    register_objectメソッドでテンプレートファイルに渡した配列にアクセスする方法がわかりません。 //PHPファイル register_object('data', $obj, 'array') //tplファイル 配列arrayの第一データは、{obj->array[0]}です。 //エラー 配列arrayの第一データは、{obj->array.0}です。 //エラー Smartyマニュアルに、register_objectメソッドについて、 『それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。 しかし繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません。』 とありますが、これはregister_objectメソッドを使ってオブジェクトを渡す場合、配列にはアクセスできないということなのでしょうか? もし、そうであればassignを使うしかないのでしょうか?register_objectで書くほうがスマートなので、可能であればそちらを使いたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 関数の組み込み。

    PHPでの関数の組み込みの質問です。 自作の関数を集めたPHPファイル"common_function.php"を製作し、 それぞれの処理の頭でこの関数ファイルをinclude_onceを使って 読み込んでいるという形式で処理を行っています。 include_once("../common/common_function.php"); この処理を行わずにこの関数ファイルををデフォルトで読み込む ようにPHPの設定に組みこむ事はできないのでしょうか? よい方法があれば宜しくお願いします。

    • ベストアンサー
    • PHP
  • エラーが起きた位置の特定

    例えば下記のようなコードで、この(↓)エラーが出たとします。 Warning: somefunc1(): The argument should be an array in /path/to/test.php on line 5 このエラーが、 A) 18行目→test_func1()→somefunc1() の経路で発生したエラーなのか、 B) 19行目→test_func2()→test_func1($arg1)→somefunc1() の経路なのか、 C) 19行目→test_func2()→test_func1($arg2)→somefunc1() の経路なのか、 それを効率よく判断する方法はありませんか? この位簡単なコードではデバッグも簡単なんですが、大規模なアプリケーションになってくると、どの時点で起きたエラーなのか(どの手順で呼び出された時なのか、ループの何回目なのか等)の判断ができなくなってきてしまいます。 ==== test.php ==== 01: <?php 02: 03: function test_func1($arg) 04: { 05:   somefunc1($arg); // PHP組み込み関数 06: } 07: 08: function test_func2($arg) 09: { 10:   $arg1 = somefunc2($arg); // PHP組み込み関数 11:   $arg2 = somefunc3($arg); // PHP組み込み関数 12:   test_func1($arg1); 13:   test_func1($arg2); 14: } 15: 16: $val = /* ...処理... */ ; 17: 18: test_func1($val); 19: test_func2($val); 20: 21: ?> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • gem内部での$LOAD_PATHの制御

    特定のrailsのgemにさらに機能を追加してくて、新しくgemを作成しました。 gemはtypusというgemです。 https://github.com/typus/typus これの、gemの中でautoloadされているhelper関数を拡張したいと思っています。 問題はそのためのgemの作り方で、helper関数はautoloadされるので、モンキーパッチングの適応が出来ません。 なので、typusのhelper関数よりも前に、拡張を行うgemの方で、拡張済のhelperを読み込む様にしないといけません。 そうなると、$LOAD_PATHの中で確実にtypusよりも、拡張gemの方が先に参照できる様にしないといけないのですが 普通これはどうすでばいいのでしょうか? 通常はgemspecファイルの中で、次の様に書かれて、これで制御されているので、書かれた順によると思うのです。 $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)

    • ベストアンサー
    • Ruby
  • 【PHP】関数で処理が止まってる??

    お世話になります。 PHPでの質問ですが、PHPに限ったものではないように思いますので、プログラム全般に対しての質問と思って下さって結構です。 ※PHP特有のという意見があれば、それも大歓迎です。 下記のようなコードを組んでみました。 <?php echo "func1の結果["; echo func1(); echo "]"; function func1(){ (内容は割愛) return TRUE; } ?> このコードをアップしてアクセスしてみると   出力結果  func1の結果[ でした。 ブラウザのステータスに「ページが表示されました」とあるので、処理中で出力待ちということはないと思います。 > echo func1(); > echo "]"; の箇所の出力はどうなっていると考えればいいのでしょうか? 「関数の内容次第で・・・」とお答えになる方、どういう内容だとこのような結果になるのかというところでお答えください。 私のプログラムによる根本的な考え方は、プログラムは上から下に順番になので、 上記内容の箇所にどんなコードがあったとしても、func1関数はTRUEを返すので、結果としては「func1の結果[1]」となるはずでした。 でも実際の出力結果をみると処理が途中で(おそらくfunc1()内で)止まっているともいます。 timeoutではないため無限ループに嵌ってっていうのもないと思います。 これはどういうことでしょう???

    • 締切済み
    • PHP

専門家に質問してみよう