LonghornPHP 2026

forward_static_call

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

forward_static_callВызов статического метода

Описание

function forward_static_call(callable $callback, mixed ...$args): mixed

Вызов пользовательской функции или метода, заданные в параметре callback с последующими аргументами. Эта функция должна вызываться в контексте метода и не может быть вызвана вне класса. Она использует позднее статическое связывание.

Список параметров

callback

Функция или метод для вызова. Этот параметр может быть массивом с именем класса и метода, либо строкой с именем функции.

args

Ноль или более параметров, которые будут переданы вызываемой функции.

Возвращаемые значения

Возвращает результат функции или false , в случае возникновения ошибки.

Примеры

Пример #1 Пример использования forward_static_call()

<?php
class A
{
 const NAME = 'A';
 public static function test() {
 $args = func_get_args();
 echo static::NAME, " ".join(',', $args)." \n";
 }
}
class B extends A
{
 const NAME = 'B';
 public static function test() {
 echo self::NAME, "\n";
 forward_static_call(array('A', 'test'), 'more', 'args');
 forward_static_call( 'test', 'other', 'args');
 }
}
B::test('foo');
function test() {
 $args = func_get_args();
 echo "C ".join(',', $args)." \n";
 }
?>

Результат выполнения приведённого примера:

B
B more,args
C other,args

Смотрите также

  • forward_static_call_array() - Вызов статического метода и передача параметров в виде массива
  • call_user_func_array() - Вызывает callback-функцию с массивом параметров
  • call_user_func() - Вызывает callback-функцию
  • is_callable() - Проверяет, доступно ли значение для вызова как функция в текущей области видимости

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 2 notes

up
6
arthur dot techarts at gmail dot com
15 years ago
Example to understand this function and difference with call_user_func:
<?php
class Beer {
 const NAME = 'Beer!';
 public static function printed(){
 echo 'static Beer:NAME = '. static::NAME . PHP_EOL;
 }
}
class Ale extends Beer {
 const NAME = 'Ale!';
 public static function printed(){
 forward_static_call(array('parent','printed'));
 call_user_func(array('parent','printed'));
 forward_static_call(array('Beer','printed'));
 call_user_func(array('Beer','printed'));
 }
}
Ale::printed();
echo '</pre>';
?>
up
1
jhibbard at gmail dot com
14 years ago
Example usage via calls outside of the class and within an object:
<?php
/**
 * @author Jonathon Hibbard
 */
class foo {
 # used to verify we're actually setting something..
 private static $value = '';
 /**
 * Simple setter for the static method setValue...
 */
 public static function set($method_identifier, $value_to_pass = '') {
 # make sure we have the right method format...
 # another semi-useful example is like this (useful for REST-like requests...): str_replace(" ", "", ucwords(str_replace("_", " ", $method_identifier)));
 $static_method = 'set' . ucfirst(strtolower(trim($method_identifier)));
 if(method_exists(__CLASS__, $static_method)) {
 //Note: this will not work and will throw PHP Parse error: syntax error, unexpected '::'
 //__CLASS__::$static_method($value_to_pass);
 foo::$static_method($value_to_pass);
 echo "\tCalling forward_static_call with pure string and value param:\n";
 forward_static_call(__CLASS__ . "::" . $static_method, $value_to_pass);
 echo "\tCalling forward_static_call with class, method array and value param:\n";
 forward_static_call(array(__CLASS__, $static_method), $value_to_pass);
 }
 }
 /**
 * Set self::$value to something?
 */
 public static function setValue($value_recieved = '') {
 echo "\t\tsetValue called with param of " . var_export($value_recieved, true) . "!\n";
 echo "\t\tSetting Private 'value'...\n";
 self::$value = $value_recieved;
 echo "\t\tChecking the Private 'value':\n";
 if(!empty(self::$value)) {
 echo "\t\t\tPrivate 'value' was set to '" . self::$value . "' as expected!\n";
 } else {
 echo "\t\t\tPrivate 'value' was not set!\n";
 }
 # Reset...
 self::$value = '';
 }
 /**
 * Create an object and test calling the static method from within this realm...
 */
 public function __construct() {
 echo "\tCalling from within constructor..\n";
 foo::set('value','Something else from within the instance!');
 }
}
echo "\n============ Calling by static method first ============\n";
foo::set('value','Something from outside of the foo class!');
echo "\n============ Calling by static method without a value next ============\n";
foo::set('value');
echo "\n============ Calling by createing an instance next ============\n";
new foo();
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /