0

我有这个自动加载器方法,用于根据需要包含类文件。

public static function autoloader($className) {

    $fileExists = false;
    foreach(array(LIBS_PATH, CONTROLLERS_PATH, MODELS_PATH) as $path) {

        // Check if the class file exists and is readable
        if(is_readable($classPath = $path . '/' . $className . '.php')) {
            // Include the file
            require($classPath);
            $fileExists = true;
            break;
        }
    }

    if($fileExists === false) {
        exit('The application cannot continue as it is not able to locate a required class.');
    }
}

这很好,但我想这样更好:

public static function autoloader($className) {

    foreach(array(LIBS_PATH, CONTROLLERS_PATH, MODELS_PATH) as $path) {

        // Check if the class file exists and is readable
        if(is_readable($classPath = $path . '/' . $className . '.php')) {
            // Include the file
            require($classPath);
            return;
        }
    }
    exit('The application cannot continue as it is not able to locate a required class.');
}

如您所见,我在循环中间使用 return 语句来终止函数的其余部分,因为已包含类文件并且该方法已完成其工作。

如果找到匹配项,哪种方式是跳出循环的最佳方式?我只是不确定是否使用 return 语句,因为我总是将它与从方法返回一些值相关联。

4

3 回答 3

3

Return 可用于简单地跳出方法/函数,这种用法是完全合法的。真正要问的问题是你觉得它对可读性有什么影响?

关于早期回报有不同的思想流派。

一所学校维护一个单一的入口/出口点,声称它使代码更易于阅读,因为可以确保将达到代码底部的逻辑。

另一所学校表示第一所学校已经过时,这并不是一个紧迫的问题,特别是如果一个人保持较短的方法/函数长度。

两者之间存在一种媒介,即存在早期回报和复杂逻辑之间的权衡。

这取决于你的判断。

于 2012-12-12T16:34:15.497 回答
1

不,这样使用 return并没有错。

于 2012-12-12T16:34:48.007 回答
0

至少看一下手册:

http://php.net/manual/en/function.autoload.php

void __autoload ( string $class )

void意味着它不应该返回任何东西。
但这不是错误。

require_once并且在包含类定义时也可以更好地使用。

于 2012-12-12T16:35:10.570 回答