1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.is-callable" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>is_callable</refname>
<refpurpose>
Verify that a value can be called as a function from the current scope
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>is_callable</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>syntax_only</parameter><initializer>&false;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter role="reference">callable_name</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Verifies that <parameter>value</parameter> is a <type>callable</type>,
or that it can be called using the
<function>call_user_func</function> function.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
The value to be checked.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>syntax_only</parameter></term>
<listitem>
<para>
If set to &true; the function only verifies that
<parameter>value</parameter> might be a function or method. It will
reject any values that are not <link linkend="object.invoke">invokable</link> objects,
<classname>Closure</classname>, &string;s, or &array;s that do not have
a valid structure to be used as a callback. A valid callable array
has 2 entries, the first of which is an object
or a string, and the second a string.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>callable_name</parameter></term>
<listitem>
<para>
Receives the "callable name", e.g.
<literal>"SomeClass::someMethod"</literal>. Note, however, that despite
the implication that <literal>SomeClass::someMethod()</literal> is a
callable static method, this is not the case.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns &true; if <parameter>value</parameter> is callable, &false;
otherwise.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Checking whether a string can be called as a function</title>
<programlisting role="php">
<![CDATA[
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
bool(true)
string(12) "someFunction"
]]>
</screen>
</example>
<example>
<title>Checking whether an array can be called as a function</title>
<programlisting role="php">
<![CDATA[
<?php
class SomeClass
{
public function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
bool(true)
string(21) "SomeClass::someMethod"
]]>
</screen>
</example>
<example>
<title><function>is_callable</function> and constructors</title>
<simpara>
<function>is_callable</function> reports constructors as
not being callable.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public function __construct() {}
public function foo() {}
}
var_dump(
is_callable(['Foo', '__construct']),
is_callable(['Foo', 'foo'])
);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
bool(false)
bool(false)
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<simplelist>
<member>
An object is always callable if it implements <link linkend="object.invoke">__invoke()</link>,
and that method is visible in the current scope.
</member>
<member>
A class name is callable if it implements <link linkend="object.callstatic">__callStatic()</link>.
</member>
<member>
If an object implements <link linkend="object.call">__call()</link>, then this function will
return &true; for any method on that object, even if the method is not defined.
</member>
<member>
This function may trigger autoloading if called with the name of a class.
</member>
</simplelist>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>call_user_func</function></member>
<member><function>function_exists</function></member>
<member><function>method_exists</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|