如果文件不存在,如何防止包含错误(没有@)

时间:2012-04-03 19:54:35

标签: php

大家好,你们可以帮助我。

我有下一个代码

  

的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())){...}......

我有一种方法。谨慎使用spl_autoload_register();我可以写

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

但根据php文档,我想使用spl_autoload_register ... 如果您需要完整的代码,我很乐意展示它。

谢谢!

3 个答案:

答案 0 :(得分: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." );
}

答案 1 :(得分: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';
    }
  }
}

答案 2 :(得分:0)

您可以使用

关闭错误
 <?PHP 
 error_reporting(E_ALL & ~E_WARNING)
 ?>