2

test.php を実行すると、!class_exists 行で常にエラーが発生するのはなぜですか?

これはtest.phpです:

<?php    //test.php
    require_once './app/Mage.php';
    Mage::app()->setCurrentStore(0);
    Mage::setIsDeveloperMode(true);


    require_once("test-class.php");
?>

これは test-class.php です:

<?php    //test-class.php
        if (!class_exists("AClass")) {
            class AClass {
                public function AnAction() {
                   return 123;
                }
            }
         }
?>
4

1 に答える 1

3

Magento ブートストラップapp/Mage.php は autoloader を登録するため、トリガーへの呼び出しはclass_exists()、このクラスのクラス定義をロードしようとします。この動作は、次を渡すことで変更できますfalse

<?php    //test-class.php
    if (!class_exists("AClass",false)) {
        class AClass {
            public function AnAction() {
               return 123;
            }
        }
     }
?>

さらに、ブートストラップは、オートローダーが使用するインクルード パス引数を設定します。

$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';

上記のディレクトリのいずれかにクラス定義を配置すると、定義が必要なときにいつでも定義できるようになります。

于 2013-01-03T02:57:18.357 に答える