PHP.mk документација

is_callable

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.is-callable.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.is-callable.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
is_callable

Референца за `function.is-callable.php` со подобрена типографија и навигација.

function.is-callable.php

is_callable

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

is_callable Проверете дали вредноста може да се повика како функција од тековниот опсег

= NULL

is_callable(mixed $value, bool $syntax_only = false, string &$callable_name = null): bool

Проверува дека value е callable, или дека може да се повика користејќи call_user_func() function.

Параметри

value

Вредноста што треба да се провери.

syntax_only

Ако е поставено на true функцијата само проверува дека value може да биде функција или метод. Ќе отфрли било какви вредности што не се invokable објекти, Затворање, strings, или arrays што немаат валидна структура за да се користат како повик. Валиден повиклив список има 2 записи, од кои првиот е објект или стринг, а вториот е стринг.

callable_name

Прима "име на повик", на пр. "SomeClass::someMethod". Имајте предвид, сепак, дека и покрај импликацијата дека SomeClass::someMethod() е статички метод што може да се повика, ова не е случај.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true if value е повиклив, false otherwise.

Примери

Пример #1 Проверка дали стринг може да се повика како функција

<?php

function someFunction() {}

$functionVariable = 'someFunction';

var_dump(is_callable($functionVariable, false, $callable_name));

var_dump($callable_name);

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

bool(true)
string(12) "someFunction"

Пример #2 Проверка дали список може да се повика како функција

<?php

class SomeClass
{
public function
someMethod() {}
}

$anObject = new SomeClass();

$methodVariable = [$anObject, 'someMethod'];

var_dump(is_callable($methodVariable, true, $callable_name));

var_dump($callable_name);

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

bool(true)
string(21) "SomeClass::someMethod"

Пример #3 is_callable() и конструктори

И покрај фактот дека конструкторите се методите што се повикуваат кога се создава објект, тие не се статички методи и is_callable() ќе врати false за нив. Не е можно да се користи is_callable() за да се провери дали класа може да се инстанцира од тековниот опсег.

<?php

class Foo
{
public function
__construct() {}

public function
foo() {}
}

var_dump(
is_callable(['Foo', '__construct']),
is_callable(['Foo', 'foo'])
);

$foo = new Foo();
var_dump(is_callable([$foo, '__construct']));

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

bool(false)
bool(false)
bool(true)

Белешки

  • Објектот е секогаш повикувачки ако имплементира __invoke(), и тој метод е видлив во тековниот опсег.
  • Името на класата е повикувачко ако имплементира __callStatic().
  • Ако објектот имплементира __call(), тогаш оваа функција ќе врати true за кој било метод на тој објект, дури и ако методот не е дефиниран.
  • Оваа функција може да предизвика авто-вчитање ако се повика со името на класата.

Види Исто така

  • call_user_func() - Повикајте ја повратната функција дадена од првиот параметар
  • function_exists() - Вчитува PHP екстензија во време на извршување
  • method_exists() - Проверува дали постои метод на класата

Белешки од корисници 2 забелешки

izharaazmi на gmail точка com
пред 10 години
If the target class has __call() magic function implemented, then is_callable will ALWAYS return TRUE for whatever method you call it.
is_callable does not evaluate your internal logic inside __call() implementation (and this is for good).
Therefore every method name is callable for such classes.

Hence it is WRONG to say (as someone said):
...is_callable will correctly determine the existence of methods made with __call...

Example:
<?php
class TestCallable
{
    public function testing()
    {
          return "I am called.";
    }

    public function __call($name, $args)
    {
        if($name == 'testingOther') 
        {
                return call_user_func_array(array($this, 'testing'), $args);
        }
    }
}

$t = new TestCallable();
echo $t->testing();      // Output: I am called.
echo $t->testingOther(); // Output: I am called.
echo $t->working();      // Output: (null)

echo is_callable(array($t, 'testing'));       // Output: TRUE
echo is_callable(array($t, 'testingOther'));  // Output: TRUE
echo is_callable(array($t, 'working'));       // Output: TRUE, expected: FALSE
?>
mohamed точка elidrissi на protonmail точка com
пред 4 години
Note that -- as mentioned in the migration guide-- starting from PHP 8.0, is_callable() will not work with non-static methods if you use a class name, instead an object of the class should be provided:

<?php

class Test
{
    public function method1() { }
    public static function method2() { }
}

// Pre PHP 8
var_dump(is_callable(array('Test', 'method1'))); // bool(true)
var_dump(is_callable(array('Test', 'method2'))); // bool(true)

// Post PHP 8
var_dump(is_callable(array('Test', 'method1'))); // bool(false)
var_dump(is_callable(array('Test', 'method2'))); // bool(true)
var_dump(is_callable(array(new Test, 'method1'))); // bool(true)

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.