重命名 require_once 函数的策略?

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于重命名 require_once 函数的策略?的主要内容,如果未能解决你的问题,请参考以下文章

重命名mysql过程

在 Python 中重命名 ZipFile

Python文件重命名代码

如何在 PowerShell 中使用条件语句重命名文件

重命名文件时忽略错误58

打字稿:通过打字重命名obj属性