【发布时间】:2023-04-04 04:16:01
【问题描述】:
我想在一个方法中包含/要求一个包含多个函数的文件。我的目标是使包含的函数仅在相应方法的范围内可用,而不在调用范围内。这在 PHP 中可行吗?
例如在下面的最小示例中,我希望 foo() 仅在方法 buzz() 内可用,而不是在周围范围内可用(不幸的是)。
// foo.php
<?php
function foo()
{
return "foo";
}
// bar.php
<?php
class Bar
{
public function buzz()
{
require_once("foo.php");
return foo();
}
}
$bar = new Bar();
// should work
echo $bar->buzz();
// should not work
echo foo();
一般任务是将遗留代码库中的函数包装在 Symfony 服务的方法中。只能通过调用相应的方法来访问旧功能。因此,旧函数不应在全局范围内。
一个主要限制是foo.php 中的函数是我无法修改的遗留代码库的一部分。
【问题讨论】:
-
也许您最好将其声明为特征 (php.net/manual/en/language.oop5.traits.php)。目前您正在尝试使用嵌套函数,这并不是特别 OO。
-
也许namespaces 会有所帮助?
-
@NigelRen 这些函数来自我无法修改的遗留代码库。我的目标是将它们包装在新项目中的类方法中(直到它们最终被替换),只为它们提供一个 OO 接口。