forward_static_call

(PHP 5 >= 5.3.0, PHP 7)

forward_static_callCall a static method

Описание

mixed forward_static_call ( callable $function [, mixed $parameter [, mixed $... ]] )

Calls a user defined function or method given by the function parameter, with the following arguments. This function must be called within a method context, it can't be used outside a class. It uses the late static binding.

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

function

The function or method to be called. This parameter may be an array, with the name of the class, and the method, or a string, with a function name.

parameter

Zero or more parameters to be passed to the function.

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

Returns the function result, or FALSE on error.

Примеры

Пример #1 forward_static_call() example

<?php

class A
{
    const 
NAME 'A';
    public static function 
test() {
        
$args func_get_args();
        echo static::
NAME" ".join(','$args)." \n";
    }
}

class 
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 a static method and pass the arguments as array
  • call_user_func_array() - Вызывает пользовательскую функцию с массивом параметров
  • call_user_func() - Вызывает пользовательскую функцию, указанную в первом параметре
  • is_callable() - Проверяет, может ли значение переменной быть вызвано в качестве функции
  • информация о типе callback

Коментарии

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>';
?>
2011-07-12 10:39:38
http://php5.kiev.ua/manual/ru/function.forward-static-call.html
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_recievedtrue) . "!\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();
?>
2012-06-19 22:55:25
http://php5.kiev.ua/manual/ru/function.forward-static-call.html

    Поддержать сайт на родительском проекте КГБ