php ismethod,结合php类三种属性说明is_callable和method_exists简单区别
class Man{
public function one(){
echo 'public ';
}
protected function two(){
echo 'protected';
}
static private function three(){
echo 'private';
}
static function four(){
echo 'static only';
}
}
$man1= new Man();
/**
*静态方法可以通过未实例化的类直接访问或者通过实例化的类访问,通过::或者new Obj()->,
*但是静态属性只能通过类本身访问,实例化的类是不可以访问类的静态属性的
*/
$man1::four();
var_dump(is_callable(array($man1,'one')));// true
var_dump(is_callable(array("Man",'one')));// true
var_dump(is_callable(array("Man",'two')));//false
var_dump(is_callable(array($man1,'three')));//false
// 拼装数组,结合第二个参数(bool)和第三个参数($string)
$methodVariable1=array('Man','one');
$methodVariable2=array('Man','two');
$methodVariable3=array($man1,'three');// 实例化对象也可以
$methodVariable4=array('Man','three');
$methodVariable5=array('Man','four');
var_dump(is_callable($methodVariable1,true,$call_one));// true
var_dump(is_callable($methodVariable2,true, $call_two));//true
var_dump(is_callable($methodVariable3,true, $call_three));//true
// 如果method为public ,is_callbale()为真,如果methond为protected或者private 为假
echo "\n";
var_dump(is_callable($methodVariable1,false));//true
var_dump(is_callable($methodVariable2,true));//true
var_dump(is_callable($methodVariable3,false,$call_four));//false protected在子类父类本类内部访问
var_dump(is_callable($methodVariable4,false,$call_five));//false private只能在内部调用,所以为false
// 静态方法
echo 'call static only',"\n";
var_dump(is_callable($methodVariable5,false,$call_six));// true
echo 'call static only but use new object',"\n";
var_dump(is_callable(array($man1,'four'),false,$cal_seven));// true
//method_exists 只能验证类(或者实例化对象)的某个方法是否存在(不在乎调用问题),不能用实例化后类的检测
if(method_exists($man1, 'one')){
echo 'yes';
}else{
echo 'no ';//
}
if(method_exists('Man', 'two')){
echo 'yes';//
}else{
echo 'no ';
}
echo"\n";
var_dump($call_one);//Man::one
var_dump($call_two);//Man::two
var_dump($call_three);//Man::three
var_dump($call_four);//虽然是false,也可以输出
var_dump($call_five);//虽然是false,也可以输出
var_dump($call_six);//"Man::four"
var_dump($call_seven);//"Man::four"
php ismethod,结合php类三种属性说明is_callable和method_exists简单区别相关推荐
- 三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate
在<上篇>中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit.本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression ...
- unix/mac/dos-windows三种文本文件的格式的行尾区别
在项目程序中,用fgets()读一个文本文件,一行一行的读取,之前测试的所有的文件都没有问题,今天突然拿到一个文件测试时却出问题了,调试发现它并没有一行一行的读,但是用notepad++明明可以看到文 ...
- 怎样给视频配音?三种配音方法来助力,简单又方便
怎样给视频配音?三种配音方法来助力,简单又方便 为视频配音是每一位做短视频的作者都应当掌握的一个技能,那么今天我们就来一些学习三种配音方法,各有各的好处,也各有各的不足,不过好在都简单又方便. 方法一 ...
- 转载.Android HAL实现的三种方式(1) - 基于JNI的简单HAL设计
现在在Android上的HAL开发总的来说还是随意性比较大,Android也并没有规范好一个具体的框架,下面我将根据Jollen的Mokoid工程,自己做了一些改动,分别给大家介绍一下三种实现方式. ...
- JSON的三种解析方式以及JSONObject、JSONArray区别
JSON的常用两种解析方式 一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串 ...
- FAT32 or exFAT or NTFS,三种U盘格式的联系与区别
U盘格式包括三种:FAT32.exFAT 和 NTFS,那么这三个格式具体有什么区别呢? (1) FAT32(File Allocation Table 32bit) 32位文件分配表,FAT32文件 ...
- 422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别
SPI.I2C.串口.我相信如果你是从事的是嵌入式开发,一定会用到这三种通信协议,串口的话因为和波特率有关,所以一般的CPU或者MCU只会配有两个或者三个串口,而数据的传输,的话SPI和I2C用得会比 ...
- SPI、I2C、UART三种串行总线的原理、区别及应用
SPI协议解析,链接如下 https://blog.csdn.net/weiqifa0/article/details/82765892 I2C协议解析,链接如下 https://blog.csdn. ...
- vmware 虚拟机三种网络模式 桥接 NAT 仅主机区别 是什么意思
由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费.那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations ...
最新文章
- 漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?
- NHibernate 对分组聚合支持的不好
- SVD分解.潜语义分析.PythonCode
- unity挺好用的移动端相机控制器(Android和IPhone通用)
- 华为机型深色模式下问题
- html文档基本格式主要包括以下哪几类,CAD多选题考试题「附答案」
- 有了HTML5,Flash还能走多远
- 【科普】AHCI模式是什么,与IDE模式有什么区别?
- BZOJ5118: Fib数列2
- TIPTOP报表提示:foreach: 字元轉換至數字程序失敗.
- rsa java模数_RSA加密:利用模数和指数生成公钥加密
- 白光干涉仪能做什么丨科普篇
- expdp impdp
- iOS 正则表达式判断手机号,邮箱等
- 数字 IC 笔试面试必考点(12)静态时序分析 STA
- 数学建模暑期集训21:主成分分析(PCA)
- qq客服不需要加好友的html方法
- 企业内网安全建设的全面解析
- linux将用户加入多个组,Linux 用命令把同一个用户加入多个组
- 云原生实践,政务安全大脑,云端密码应用…腾讯在湾区创见大会发布了哪些重点