php - 什么时候全局函数不是可调用的?
问题描述
我有一个特殊的情况,我需要允许函数的外部定义,并在测试套件中使用它们。PHP 允许您在任何地方定义全局函数很奇怪,但它的行为似乎不一致。
如果我将其作为独立脚本运行,$a
则为true
:
function php()
{
return false;
}
$a = is_callable('php');
但是,如果我在 PHPUnit 测试(测试外部定义函数的注入)中运行相同的代码,则同一事物的断言将失败,如下所示:
class MyTest extends TestCase
{
public function testThis()
{
function php()
{
return false;
}
self::assertTrue(is_callable('php'));
}
}
如果它显式地在全局范围内,它仍然会以同样的方式失败:
class MyTest extends TestCase
{
public function testThis()
{
self::assertTrue(is_callable('php'));
}
}
function php()
{
return false;
}
根据文档:
PHP 中的所有函数和类都具有全局作用域——即使它们是在函数内部定义的,它们也可以在函数外部调用,反之亦然。
我知道嵌套函数定义必须在此之前运行才能使其可访问,但是这两个示例都是这样做的。
PHPUnit 是否会阻止全局函数的定义?
解决方案
最合理的解释是你的代码不在全局命名空间中。如下所示
<?php
namespace App;
function php() {
}
var_dump(is_callable('App\\php'));
推荐阅读
- python - pywin32 如何使用 PyCwnd.HookMessage
- asp.net-identity - Microsoft Identity 更好地使用 AuthenticatorTokenProvider?
- javascript - 这种数组操作有没有一种有效的方法JS?
- javascript - 将对象转换为查询字符串
- javascript - 开玩笑 - 测试 createAsyncThunk
- rust - 是否可以使用 Rust 的日志信息进行测试?
- javascript - 20K 用户的 Web UI 负载测试
- javascript - 自定义赛普拉斯 click() 命令始终返回 click({force: true})
- python - Python中给定整数从0到给定整数的特定数字出现计数器
- python - 如何找到python selenium中的最后一个元素