0

spl_autoload_register() について学習しようとしています。私の index.php はドキュメント ルートの下にあり、私の MyClass.php はドキュメント ルートの下に置かれます /MyProject/MyClass/MyClass.php ここに私の index.php があります

<?php

define('CLASSDIR', 'mylib');
define('BASEPATH',  @realpath( dirname (__FILE__).'/../').'/'.CLASSDIR);

spl_autoload_register(null, false);
spl_autoload_extensions('.php');

// PSR-0 provided autoloader.
function autoLoader($className){

    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= BASEPATH.'/'.str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    require $fileName;
}

spl_autoload_register('autoLoader');

$obj = new MyClass();
$obj->test();
?>

ここに私のクラスがあります: MyClass.php

<?php
namespace MyProject\MyClass;

class MyClass{

    public function __contruct(){
        echo('weird');
    }

    function test(){
        echo 'issue';
    }
}?>

エラーは次のとおりです。

Fatal error: Call to undefined method MyClass::test() in /path/to/file/index.php on line 26

それで、私はそれがクラスを見つけたと仮定しています(文句を言わなかったので)?ただし、「奇妙な」および「問題」というメッセージは表示されません。コンストラクターが起動しなかったことを教えてください。

4

1 に答える 1

0

classesさて、クラスファイルが(例)次のような構造と呼ばれる別のフォルダーにあると仮定します:

DOCUMENT_ROOT/
    ->index.php
    ->classes/
        ->Myclass/
            ->Myclass.php

あなたのどこかに次のindex.phpようなものがあります:

<?php 
DEFINE('__BASE', realpath(dirname(__FILE__)));

require_once('load.php');
?>

これで、ファイルには次のような関数が含まれload.phpているはずです。__autoload()

// Auto load function to load all the classes as required
function __autoload($class_name) {
    $filename = ucfirst($class_name) . '.php';
    $file = __BASE . DIRECTORY_SEPARATOR .'classes/' . ucfirst($class_name) . $filename;

    // First file (model) doesnt exist
    if (!file_exists($file)) {
        return false;
    } else {
        // include class
        require $file;
    }
}

編集:

でやりたい場合はspl_autoload_register()、これに似たものがload.php

// Auto load function to load all the classes as required
    function load_classes($class_name) {
        $filename = ucfirst($class_name) . '.php';
        $file = __BASE . DIRECTORY_SEPARATOR .'classes/' . ucfirst($class_name) . $filename;

        // First file (model) doesnt exist
        if (!file_exists($file)) {
            return false;
        } else {
            // include class
            require $file;
        }
    }

    spl_autoload_register('load_classes');
于 2013-10-20T15:26:27.937 に答える