Метод callStatic в PHP

Новая версия PHP предоставила новый метод, известный как "__callStatic()", который работает так же, как "__call()", но, как вы уже догадались, он является статическим. В данном методе используется оператор видимости "::" в отличии от метода "__call()" в котором он запрещён, и так же не допускается оператор "->".

Приведём пример работы:


class _byCallStatic
{
	public static function __callStatic($_name, $_param)
	{
		return 'Название метода: <b>'. $_name .'</b><br>
		Аргументы метода: <pre>'. var_export($_param, true) .'</pre>
		Массив аргументов метода: <pre>'. var_export(func_get_args(), true) .'</pre>
		<b>'. implode('-', $_param) .'</b>';

	}

	/*
	* При использование спецификатора доступа "private" или "protected" данный метод вызван не будет т.к его перехватит метод "__callStatic()",
	* но при использование спецификатора доступа "public" данный метод задействуется.
	* Но и данный случай можно обойти.
	*/
	private static function _newCall(){ echo 'Method: '. __METHOD__; }

}
echo _byCallStatic::_newCall(114, 'Integer', 157);

Результат:


Название метода: _newCall

Аргументы метода:
array (
  0 => 114,
  1 => 'Integer',
  2 => 157,
)

Массив аргументов метода:
array (
  0 => '_newCall',
  1 =>
  array (
    0 => 114,
    1 => 'Integer',
    2 => 157,
  ),
)
114-Integer-157

Сейчас продемонстрируем обход закрытых метов класса:


class _byCallStatic
{
	/* Пример обхода "закрытых" методов класса, при использовании метода "__callStatic()",
	* как препроцессора для вызова статического метода.
	*/
	public static function __callStatic($_name, $_param) { return call_user_func_array('static::'. $_name, $_param); }

	private static function _newCall(){ echo 'Method: '. __METHOD__; }
}

echo _byCallStatic::_newCall(114, 'Integer', 157); # Результат: Method: _byCallStatic::_newCall


Комментировать

captcha

Сайты:



Новые отзывы о сайтах:

Авторизация

Если у Вас нет учетной записи, зарегистрируйтесь

captcha

Напомнить пароль
Создание учётной записи

captcha

Напомнить пароль

captcha

Войти в личный кабинет