- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我和我的同事遇到了一些相当奇怪的行为。我们的环境是 Ubuntu 11.10、带有 Suhosin-Patch 的 PHP 5.3.6-13ubuntu3.6 和 Windows 7 PHP 5.3.5。
在我们的机器上,以下代码按预期运行:
<?php
function t() { }
var_dump(is_callable('/'));
输出:
bool(false)
在我们的一台服务器上,CentOS 版本 5.7(最终版),PHP 5.3.8,相同的代码产生:
bool(true)
如果没有 t()
函数,is_callable
会按预期执行。请注意,在这些测试中,is_function
的行为与 is_callable
相同。
有人知道是什么原因造成的吗?
编辑:
它似乎只在存在名为 t
的函数时发生,其他任何东西,如 b
、c
等,并且输出为正如预期的那样。
编辑 - 测试更多字符:
<?php
function t() { }
foreach(str_split('/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
在服务器上输出以下内容:
string(1) "/"
bool(true)
string(1) "t"
bool(true)
string(1) "T"
bool(true)
string(1) "_" // gettext
bool(true)
string(1) ":" // With the t() function undefined, this remains callable on the server
bool(true)
在我们的环境中,输出符合预期:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
编辑 - 有关 cbuckley 评论的更多信息:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();
产生输出:Call to undefined function/()
最佳答案
作为一种解决方法,你可以试试这个:
$name = '/';
$actual = null;
if (is_callable($name, false, $actual) && $name === $actual) {
// Method is actually callable
}
关于php - is_callable 在 '/' 上的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526329/
考虑以下函数对象 l : auto l = [](auto x){ x.foo(); }; 我可以成功static_assert它可以用具有 .foo() 的类型调用成员函数: struct Foo
我有这样定义的 is_callable 特性: #ifndef IS_CALLABLE_HPP #define IS_CALLABLE_HPP #include namespace is_calla
我使用 PHP 5.3,它引入了闭包。因为我现在在我的应用程序(和框架)中都可以使用闭包,所以我使用 is_callable 来查看 $callback 是哪种处理程序。 如果 $callback i
我和我的同事遇到了一些相当奇怪的行为。我们的环境是 Ubuntu 11.10、带有 Suhosin-Patch 的 PHP 5.3.6-13ubuntu3.6 和 Windows 7 PHP 5.3.
我正在开发一个项目,其中我使用了旧版本中已弃用的函数。但是如果在旧版本中使用,我不希望我的脚本停止。 所以我正在检查该函数是否存在,如果不存在则创建它。 PHP 中function_exists 和i
我正在开发一个项目,其中我使用了旧版本中已弃用的函数。但是如果在旧版本中使用,我不希望我的脚本停止。 所以我正在检查该函数是否存在,如果不存在则创建它。 PHP 中function_exists 和i
cppref已删除 std::is_callable 的入口页面, 并使用 std::is_invocable而是进入页面。 但是,std::is_callable在 Visual Studio 20
我是一名优秀的程序员,十分优秀!