重命名require_once函数的策略?

时间:2009-12-31 22:00:19

标签: php

我不想仅仅编写一个名为import()的新函数,而是想知道是否有更好的解决方案。否则require_once将仅包含在import()的范围内,这对于那里的任何“全局”变量都是不好的。

我的import()函数与require_once的工作方式不同,但用途相同(增强的可用性)。

4 个答案:

答案 0 :(得分:6)

我的直觉意见:不。不要这样做。

  • 语言具有其原生功能集。为什么要引入没有附加价值的专有功能。

  • 我认为没有理由被require_once()吓跑。

  • 我同意你的观点,使用全局变量并不是一件好事,但是牺牲将它们用作虚荣函数名称的可能性并不是一个好方法。

如果路径是您所担心的,那么为什么不编写一个返回正确路径的import()函数。像这样:

require_once import("operations.php");

唯一 - 在我看来并不那么可怕 - 缺点是你只需要确保导入总是返回某些东西的正确路径,否则require_once会崩溃。除此之外,它具有相同的舒适度,允许您根据需要控制路径,但在灵活性方面不会花费任何成本。

答案 1 :(得分:2)

我不了解你和你的团队,但我从来没有遇到过一个PHP开发人员“被吓到”的必需/包括 - 这就是语言的工作方式。

如果你被这些事情吓跑了,也许你应该使用另一种语言。

你提出的建议听起来像是维护噩梦。

答案 2 :(得分:0)

使用__autoload()可能会得到与您所追求的相似的内容。然后你就可以使用你想要的任何类,而不用require它,只要它的文件在你的include_path中就可以毫无问题地加载它。

(这当然假设您尝试包含的文件中包含一个类,并且该类及其文件是根据某些约定命名的。可能不是实际上就是这种情况。)

这是一款非常标准的自动加载器,适用于Zend和Pear风格的命名约定:

<?php
/**
 * Load (include the file of) a given PHP class.
 *
 * @param string $class The name of the class to load.
 *
 * @return void
 */

function __autoload($class)
{
    $files = array(
        $class . '.php',
        str_replace('_', '/', $class) . '.php',
    );
    foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $base_path) {
        foreach ($files as $file) {
            $path = "$base_path/$file";
            if (file_exists($path) && is_readable($path)) {
                include_once $path;
                $finalPath = $path;
            }
        }
    }
    if (isset($finalPath)) {
        return;
    } else {
        die("Unable to load class '$class'.");
    }
}
?>

答案 3 :(得分:-1)

您可以通过创建导入功能并将其附加到类来减少require次调用的次数。因此,在需要框架一次之后,用户可以使用导入功能来包含其他框架类。即:

的index.php:

require_once 'MyFramework.php';
MyFramework::import('Path/To/File.php');

MyFramework.php

class MyFramework {
 static function import($path) {
   // code to include/import the path
 }   
}

另一个选择是使用PHP的auto_load语义来自动require框架类:

http://php.net/manual/en/language.oop5.autoload.php

虽然在一天结束时你不能真正替换require / include语句,但是不能编辑PHP源代码。