1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<!-- $Revision$ -->
3
- <!-- EN-Revision: 83a17a7324c2597bd6385148abf19f76127229f5 Maintainer: HonestQiao Status: ready -->
3
+ <!-- EN-Revision: 32c55286c8739fd20de9c8624473b2f3268de68e Maintainer: HonestQiao Status: ready -->
4
4
<!-- CREDITS: mowangjuanzi -->
5
5
<refentry xml : id =" function.is-callable" xmlns =" http://docbook.org/ns/docbook" >
6
6
<refnamediv >
7
7
<refname >is_callable</refname >
8
8
<refpurpose >
9
- 验证值是否可以在当前范围内作为函数调用。
9
+ 验证值是否可以在当前范围内作为函数调用
10
10
</refpurpose >
11
11
</refnamediv >
12
12
19
19
<methodparam choice =" opt" ><type >string</type ><parameter role =" reference" >callable_name</parameter ><initializer >&null; </initializer ></methodparam >
20
20
</methodsynopsis >
21
21
<para >
22
- 验证值是 <type >callable</type >。
22
+ 验证 <parameter >value</parameter > 是 <type >callable</type >,或者其可以使用
23
+ <function >call_user_func</function > 函数调用。
23
24
</para >
24
25
</refsect1 >
25
26
31
32
<term ><parameter >value</parameter ></term >
32
33
<listitem >
33
34
<para >
34
- 要验证的值
35
+ 要验证的值。
35
36
</para >
36
37
</listitem >
37
38
</varlistentry >
40
41
<listitem >
41
42
<para >
42
43
如果设置为 &true; ,则函数仅验证 <parameter >value</parameter >
43
- 可能是函数或方法。它仅拒绝不是字符串的简单变量,或者不能用作回调的有效结构的数组。只有
44
- 2 个条目有效,一个是对象或者字符串,其次是字符串。
44
+ 是函数还是方法。它将拒绝任何不是<link linkend =" object.invoke" >可调用</link >对象、<classname >Closure</classname >、&string;
45
+ 或者不能用作回调的无效结构的数组的值。有效的可调用数组只有
46
+ 2 个条目,第一个是对象或者字符串,第二个是字符串。
45
47
</para >
46
48
</listitem >
47
49
</varlistentry >
48
50
<varlistentry >
49
51
<term ><parameter >callable_name</parameter ></term >
50
52
<listitem >
51
53
<para >
52
- 接受“可调用的名称”。下面的例子是“someClass ::someMethod” 。注意,尽管
53
- someClass::SomeMethod() 暗示是可调用的静态方法 ,但事实并非如此。
54
+ 接受 “callable 名称”,例如 < literal >"SomeClass ::someMethod"</ literal > 。注意,尽管
55
+ < literal >SomeClass::someMethod()</ literal > 暗示是可调用静态方法 ,但事实并非如此。
54
56
</para >
55
57
</listitem >
56
58
</varlistentry >
69
71
&reftitle.examples;
70
72
<para >
71
73
<example >
72
- <title >< function >is_callable</ function > 例子 </title >
74
+ <title >检查字符串是否可以作为函数调用 </title >
73
75
<programlisting role =" php" >
74
76
<![CDATA[
75
77
<?php
76
- // 如何检测变量以查看是否可以作为函数调用。
77
78
78
- //
79
- // 包含函数的简单变量
80
- //
81
-
82
- function someFunction()
83
- {
84
- }
79
+ function someFunction() {}
85
80
86
81
$functionVariable = 'someFunction';
87
82
88
- var_dump(is_callable($functionVariable, false, $callable_name)); // bool(true)
89
-
90
- echo $callable_name, "\n"; // someFunction
83
+ var_dump(is_callable($functionVariable, false, $callable_name));
91
84
92
- //
93
- // 包含方法的数组
94
- //
85
+ var_dump($callable_name);
95
86
96
- class someClass {
97
-
98
- function someMethod()
99
- {
100
- }
87
+ ?>
88
+ ]]>
89
+ </programlisting >
90
+ &example.outputs;
91
+ <screen >
92
+ <![CDATA[
93
+ bool(true)
94
+ string(12) "someFunction"
95
+ ]]>
96
+ </screen >
97
+ </example >
98
+ <example >
99
+ <title >检查数组是否可以作为函数调用</title >
100
+ <programlisting role =" php" >
101
+ <![CDATA[
102
+ <?php
101
103
104
+ class SomeClass
105
+ {
106
+ public function someMethod() {}
102
107
}
103
108
104
- $anObject = new someClass ();
109
+ $anObject = new SomeClass ();
105
110
106
- $methodVariable = array( $anObject, 'someMethod') ;
111
+ $methodVariable = [ $anObject, 'someMethod'] ;
107
112
108
- var_dump(is_callable($methodVariable, true, $callable_name)); // bool(true)
113
+ var_dump(is_callable($methodVariable, true, $callable_name));
109
114
110
- echo $callable_name, "\n"; // someClass::someMethod
115
+ var_dump( $callable_name);
111
116
112
117
?>
113
118
]]>
114
119
</programlisting >
115
- </example >
120
+ &example.outputs;
121
+ <screen >
122
+ <![CDATA[
123
+ bool(true)
124
+ string(21) "SomeClass::someMethod"
125
+ ]]>
126
+ </screen >
127
+ </example >
116
128
<example >
117
- <title ><function >is_callable</function > 和构造函数 </title >
129
+ <title ><function >is_callable</function > 和构造方法 </title >
118
130
<simpara >
119
- <function >is_callable</function > 报告构造函数不可调用。
131
+ 尽管构造方法是创建对象时调用的方法,但它们不是静态方法,<function >is_callable</function >
132
+ 将对它们返回 &false; 。无法使用 <function >is_callable</function > 检查类是否可以从当前作用域实例化。
133
+
120
134
</simpara >
121
135
<programlisting role =" php" >
122
136
<![CDATA[
@@ -125,20 +139,27 @@ echo $callable_name, "\n"; // someClass::someMethod
125
139
class Foo
126
140
{
127
141
public function __construct() {}
142
+
128
143
public function foo() {}
129
144
}
130
145
131
146
var_dump(
132
- is_callable(array( 'Foo', '__construct') ),
133
- is_callable(array( 'Foo', 'foo') )
147
+ is_callable([ 'Foo', '__construct'] ),
148
+ is_callable([ 'Foo', 'foo'] )
134
149
);
150
+
151
+ $foo = new Foo();
152
+ var_dump(is_callable([$foo, '__construct']));
153
+
154
+ ?>
135
155
]]>
136
156
</programlisting >
137
157
&example.outputs;
138
158
<screen >
139
159
<![CDATA[
140
160
bool(false)
141
161
bool(false)
162
+ bool(true)
142
163
]]>
143
164
</screen >
144
165
</example >
@@ -168,6 +189,7 @@ bool(false)
168
189
&reftitle.seealso;
169
190
<para >
170
191
<simplelist >
192
+ <member ><function >call_user_func</function ></member >
171
193
<member ><function >function_exists</function ></member >
172
194
<member ><function >method_exists</function ></member >
173
195
</simplelist >
0 commit comments