1

こんにちは皆さん、次のことを手伝ってくれませんか。

次のコードがあります

index.php

set_include_path(get_include_path()
            .PATH_SEPARATOR.'application/controllers'
            .PATH_SEPARATOR.'application/models'
            .PATH_SEPARATOR.'application/views');
spl_autoload_register();
$front = new Controller;
$front->route();

Controller.php

public function route(){
    if(class_exists($this->getController())){...}......

私には1つの方法があります。使用する代わりに、spl_autoload_register();私は書くことができます

function __autoload($classname) {
 @include_once $classname.'.php';
}

しかし、php のドキュメントによると、spl_autoload_register を使用したいと考えています...完全なコードが必要な場合は、喜んでデモを行います。

ありがとうございました!

4

3 に答える 3

1

file_existsを使用するだけでよいと思います...

http://php.net/manual/en/function.file-exists.php

if( file_exists( 'path/to/' . $classname / '.php' ) )
{
  include_once( $classname.'.php' );
}

存在しないクラスを自動ロードするのはなぜですか?

これを試すこともできます:

if( !include_once( $classname.'.php' ) )
{
  //throw error, or do something... or nothing
  throw new Exception( "Autoload for $classname failed. Bad path." );
}
于 2012-04-03T20:05:47.830 に答える
1

これが私が使用するコードです(アイデアが得られることを願っています):

<?php
Class ClassAutoloader {

  function __construct() {
    spl_autoload_register(array($this, 'loader'));
  }

  private function loader($className) {

    $classPath = dirname(__FILE__).DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR;
    if(file_exists( $classPath.strtolower($className).'.php' )) {
      include $classPath.strtolower($className).'.php' ;
    } else if(file_exists( $classPath.$className.DIRECTORY_SEPARATOR.strtolower($className).'.php' )) {
      include $classPath.$className.DIRECTORY_SEPARATOR.strtolower($className).'.php';
    }
  }
}
于 2012-04-03T20:13:11.943 に答える
0

エラーをオフにすることができます

 <?PHP 
 error_reporting(E_ALL & ~E_WARNING)
 ?>
于 2012-04-03T20:05:07.980 に答える