重命名 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()
,您可能会得到与您所追求的类似的东西。然后你可以使用你想要的任何类,而不用require
ing 它,只要它的文件在你的 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 函数的策略?的主要内容,如果未能解决你的问题,请参考以下文章