【问题标题】:Strategy to rename the require_once function?重命名 require_once 函数的策略?
【发布时间】:2010-12-31 12:45:15
【问题描述】:

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

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

【问题讨论】:

  • 这是一个新的。我从来没有听说过一个库函数的可用性问题,仅仅因为它的名字就吓跑了开发人员。当您使用它时,请考虑删除 strip*()、chop()、explode()、implode()、die() 和其他听起来像伪暴力的函数。它在哪里结束?
  • 让事情变得更简单没有错。

标签: php


【解决方案1】:

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

  • 一种语言有它自己的一组函数。为什么要引入没有附加值的专有功能。

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

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

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

require_once import("operations.php");

唯一的 - 在我看来并不那么可怕 - 缺点是你只需要确保 import 总是返回一个正确的路径到 something,否则require_once 会崩溃。除此之外,它具有同样的舒适性,让您可以随心所欲地控制路径,但在灵活性方面不会花费您任何成本。

【讨论】:

    【解决方案2】:

    我不了解您和您的团队,但我从未见过 PHP 开发人员被 require/include “吓跑” - 这正是语言的工作方式。

    如果你对这些事情感到害怕,也许你应该使用另一种语言。

    而你的提议听起来像是一场维护噩梦。

    【讨论】:

    • 你不应该把事情看得太认真;)我说每次都必须考虑路径很糟糕,所以我只是大大简化了它。我相信,让生活变得更轻松并没有错。
    【解决方案3】:

    通过使用__autoload(),您可能会得到与您所追求的类似的东西。然后你可以使用你想要的任何类,而不用requireing 它,只要它的文件在你的 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'.");
        }
    }
    ?>
    

    【讨论】:

      【解决方案4】:

      您可以通过创建导入函数并将其附加到类来减少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 源代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 2017-01-02
        相关资源
        最近更新 更多