浅析php函数method_exists()与is_callable()的界别

一、函数解析

is_callable

php函数method_exists()
与is_callable()的区分在哪?在php面相对象设计进程中,往往我们要求在调用某一个方法是或不是属于某一个类的时候做出判断,常用的不二法门有
method_exists()和is_callable(),比较之下,is_callable()函数要高级部分,它承受字符串变量方式的措施名作为
第三个参数,假使类措施存在并且可以调用,则赶回true。倘使要检测类中的方法是不是能被调用,可以给函数传递一个数组而不是类的格局名作为参数。数组必须含有对象或类名,以将其看作它的首先个因素,要反省的法子名则作为第三个要素。若是该措施在类中设有,函数重返true。
代码示例:

第3章 类型、值和变量

is_callable()

(PHP 4 >= 4.0.6, PHP 5)

复制代码 代码如下:

3.2 文本

定义:

is_callable— 验证变量的情节是不是能够进行函数调用

if ( is_callable( array( $obj, $method ) ) )
{
/*要操作的代码段*/
}

3.2.1 字符串直接量

指出:在javascript中动用单引号表示字符串,在HTML中动用双引号表示字符串;

 

Description(描述)

is_callable()可以加收此外一个参数:一个布尔值,假诺将该参数设置为true,函数仅仅检查给定的点子或函数名称的语法是不是正确,而不反省其是或不是真的存在。method_exists()函数的参数为一个对象(或类名)和一个格局名,假诺给定措施在目的的类中存在,则赶回true
代码示例:

3.2.2 转义字符

\n 换行符
\r 回车符

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

boolis_callable(callback$name[,bool$syntax_only=
false[,string&$callable_name]] )

复制代码 代码如下:

3.3 布尔值

undefined null 0 -0 NaN “” 会转化为false,其余值转化为true

 

注明变量的内容是还是不是可以进行函数调用。可以用来检查一个变量是不是含有一个实惠的函数名称,恐怕一个蕴涵经过合适编码的函数和成员函数名的数组。

if ( method_exists( $obj, $method ) )
{
/*要操作的代码段*/
}

3.6 包装对象

字符串通过new
String()构造函数创设一个临时对象,那些目的继承了字符串的主意,并被用来处理属性的引用,一旦引用甘休,那么些目的活动销毁。
数字和布尔值也不无各自的艺术 Number() Boolean()
null和undefined没有包装对象

is_callable — 检测参数是或不是为法定的可调用结构

Parameters(参数)

php函数method_exists()与is_callable()的界别在于在php5中,一个主意存在并不表示它就足以被调用。对于
private,protected和public类型的艺术,method_exits()会返回true,但是is_callable()会检查存在其是或不是可以访问,借使是private,protected类型的,它会回到false。

3.10 变量作用域

在函数体内,局地变量的优先级高于同名的全局变量

bool is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]]
)

name

您可能感兴趣的篇章:

  • PHP
    Callable强制指定回调类型的办法
  • 详解php 使用Callable
    Closure强制指定回调类型

第5章 语句

严苛情势和非严峻形式之间的区分:

  • 凶横形式中明令禁止拔取with语句
  • 严加格局中有所变量要先注脚,否则将会抛出一个引用错误非凡
  • 粗暴形式用调用的函数中的一个this值是undefined,在非严峻方式中,this值总是全局变量。那可以用来判定是或不是匡助严厉形式var hasStrictMode = (fuction(){"use strict";return this === undefined}())
  • 严峻格局中,当通过call()或apply()来调用函数时,其中的this就是call()或apply()传入的率先个参数
  • 严厉情势中,给只读属性和给不可扩充的目的创设新成员都将抛出一个档次错误
  • 冷酷形式中,传入eval()的代码无法再调用程序所在的上下文中扬言变量或概念函数
  • 适度从紧格局中,函数里的arguments对象具备传入函数值的静态副本,在非严酷形式中,arguments里的数组成分和函数参数都针对同一个值的引用
  • 严苛情势中试图删除一个不可配置的属性将抛出一个品种错误
  • 凶残格局中,在一个目的直接量中定义五个或四个同名属性将暴发一个语法错误
  • 严酷形式中,函数讲明中存在五个或八个同名参数将生出一个语法错误
  • 严厉形式中,不允许利用八进制直接量
  • 严酷情势中,arguments,caller和arguments.callee都将抛出一个档次错误。

表达变量的内容是还是不是作为函数调用。
那可以检查包涵有效函数名的变量,或然一个数组,包涵了不易编码的目的以及函数名。

既可以是一个字符串类型的函数名称,也可以是一个对象和成员函数名的重组数组,比如:array($SomeOject,
‘MethodName’)

第6章 对象

参数:

syntax_only

6.1 创造对象

name

尽管设置为true,那么只是印证name是一个函数恐怕措施,函数仅仅会拒绝不是字符串,亦恐怕结构违规的数组作为回调函数。合法社团是指一个暗含多个分子的数组,首个是目的可能字符串,第一个是一个字符串。

6.1.3 原型

object.prototype没有原型对象,它不继续任何性质,所有内置函数都一而再自它

要检查的回调函数。

callable_name

6.1.4 Object.create()

选择Object.create()创制一个新目的,其中首个参数是其一目标的原型

var o = Object.create(null); //o是一个没有原型的对象

syntax_only

吸纳“调用名称”,在上面的例证里它是“someClass::someMethod”。请留意尽管someClass::someMethod()是一个可调用的静态方法,不过此地并不是真的表示一个静态方法

6.2 属性的询问和装置

当使用方括号([])运算符来获取属性的值时,方括号内的表明式必须重返字符串,恐怕是一个方可回到字符串的值

假定设置为 TRUE,那个函数仅仅验证 name 只怕是函数或措施。
它仅仅拒绝非字符,恐怕未蕴含能用于回调函数的管事社团。有效的应有包蕴三个要素,第二个是一个对象或许字符,第一个成分是个字符。

Return Values(返回值)

6.3 删除属性

delete运算符只可以删除自有总体性,不大概去除继承属性。
delete表明式删除成功后,重返true

发表评论

电子邮件地址不会被公开。 必填项已用*标注