函数require_once不会根据自定义函数显示异常消息

时间:2013-12-25 00:29:03

标签: php

以下功能似乎无法正常工作。在函数 load_module 中,我使用PHP中的require()函数从模块文件夹中获取文件。

我要做的是,检查文件是否在modules文件夹中,如果存在,则运行require_once()函数。当我尝试使用modules文件夹上的文件时,它工作得很好,那么我所做的就是删除了文件,然后再次尝试它给了我这个错误:

  

警告:require_once(xxxxxxxxxxxxxxxxxxxxxxx):无法打开流:第4行的D:\ xampp \ htdocs \ projects \ hoplate \ admin \ components \ template.php中没有此类文件或目录

它应该显示此异常错误消息:

  

有一个错误,似乎moudle不存在于它的位置xxxx

功能load_module

function load_module( $_module_file, $require_once = true ) {
        if ( $require_once )
            if ( require_once( $_module_file ))
                require_once( $_module_file);
            else
                return "There was an error, It seems that the moudle doesn't exist in it's location $_module_file";
        else
            if( require( $_module_file ) )
                require( $_module_file );
            else 
                return "There was an error, It seems that the moudle doesn't exist in it's location $_module_file";
    }

功能get_module

/* Get Modules */
            function get_module( $_module_slug ){
                load_template( ADMIN_PATH . '/modules/' . $_module_slug . '.php');
            }

更多信息 我也尝试使用file_exists()函数,但它似乎仍无效。

2 个答案:

答案 0 :(得分:0)

根据documentation

  

要求[_once]与include相同,除非失败,它也会产生致命的E_COMPILE_ERROR级错误

您的if检查不仅返回false,还会导致致命错误,导致执行停止,因此它永远不会进入else

您应该使用include代替(只会导致WARNING)或file_exists来检查模块是否存在...因为您自己处理错误没有任何好处使用require而不是include。另外,为了更好的练习,我建议抛出异常而不是返回错误字符串。

完整代码:

if ( file_exists( $_module_file ))
  include_once( $_module_file );
else
  throw new Exception("error...");

或者为了简化事情,如果你忽略了警告级错误

if( !include_once( $_module_file ))
  throw new Exception("error...");

答案 1 :(得分:0)

对于其他人遇到同样的问题。这是工作解决方案

<?php
    function load_module( $_module_file, $require_once = true ) {
        if ( $require_once )
            if( !file_exists ( $_module_file ))
                echo "<strong>There was an error</strong>, <br/> It seems that the module doesn't exist in it's location <b>$_module_file</b>";
            else 
                require_once( $_module_file );

        else
            if( !file_exists ( $_module_file ))
                echo "<strong>There was an error</strong>, <br/> It seems that the module doesn't exist in it's location <b>$_module_file</b>";
            else 
                require( $_module_file );
    }

    /* Get Modules */
    function get_module( $_module_slug ){
        load_module( ADMIN_PATH . '/modules/' . $_module_slug . '.php');
    }
?>