- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法。分享给大家供大家参考,具体如下:
php函数function_exists (),method_exists() 与is_callable()的区别在哪?
先来讲下后两个:method_exists() 与is_callable():
在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable() 。
相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true。如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数。数组必须包含对象或类名,以将其作为它的第一个元素,要检查的方法名则作为第二个元素。如果该方法在类中存在,函数返回true。 。
接下来看一段代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
class
test {
public
function
a() {
return
"test"
;
}
}
class
abc{
public
function
a(
$object
,
$funcname
) {
if
(!
is_callable
(
array
(
$object
,
$funcname
))) {
//检测方法:$funcname是否存在于$object中,并且属于正常的调用结构
echo
"error: the"
.
" "
.
$funcname
.
" no exist in "
.
$object
.
"</br>"
;
}
else
{
echo
"ok"
;
}
}
}
$abc
=
new
abc();
$abc
->a(
"test"
,
"111"
);
$abc
->a(
"test"
,
"a"
);
|
结果显示如图:
那么 如果把test类中的a方法改成私有的 或者是 受保护的 将会是什么样的结果呢?
代码如图:
结果如图:
好了我们再来看一下 method_exists()这个函数:
。
结果:
到这里结论不用讲也应该清楚了吧?
php中的method_exists()和is_callable()的区别是什么呢?
php函数method_exists()与is_callable()的区别在于在php5中,一个方法存在并不意味着它就可以被调用。对于 private,protected和public类型的方法,method_exits()会返回true,但是is_callable()会检查存在其是否可以访问,如果是private,protected类型的,它会返回false.
然后还剩下一个 function_exists().
这个比上两个的检测强度来讲是最弱的 因为 只有一个参数 函数名 $string 只会判断函数有没有被定义 。
总结一下:
function_exists 比较简单点就是判断函数有没有被定义 而method_exists 是判断类内的方法存不存在 is_callable 检测参数是否为合法的可调用结构 。
返回值 都是 bool 。
希望本文所述对大家PHP程序设计有所帮助.
原文链接:https://www.cnblogs.com/imnzq/p/6869811.html 。
最后此篇关于php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析的文章就讲到这里了,如果你想了解更多关于php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
考虑以下函数对象 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
我是一名优秀的程序员,十分优秀!