Возможно, лучшим способом до сих пор является создание собственного вызывающего метода и обтекание всего, что вам нужно до и после метода:
class MyClass {
public function callMethod()
{
$args = func_get_args();
if (count($args) == 0) {
echo __FUNCTION__ . ': No method specified!' . PHP_EOL . PHP_EOL;;
} else {
$method = array_shift($args); // first argument is the method name and we won't need to pass it further
if (method_exists($this, $method)) {
echo __FUNCTION__ . ': I will execute this line and then call ' . __CLASS__ . '->' . $method . '()' . PHP_EOL;
call_user_func_array([$this, $method], $args);
echo __FUNCTION__ . ": I'm done with " . __CLASS__ . '->' . $method . '() and now I execute this line ' . PHP_EOL . PHP_EOL;
} else
echo __FUNCTION__ . ': Method ' . __CLASS__ . '->' . $method . '() does not exist' . PHP_EOL . PHP_EOL;
}
}
public function functionAA()
{
echo __FUNCTION__ . ": I've been called" . PHP_EOL;
}
public function functionBB($a, $b, $c)
{
echo __FUNCTION__ . ": I've been called with these arguments (" . $a . ', ' . $b . ', ' . $c . ')' . PHP_EOL;
}
}
$myClass = new MyClass();
$myClass->callMethod('functionAA');
$myClass->callMethod('functionBB', 1, 2, 3);
$myClass->callMethod('functionCC');
$myClass->callMethod();
И вот вывод:
callMethod: I will execute this line and then call MyClass->functionAA() functionAA: I've been called callMethod: I'm done with MyClass->functionAA() and now I execute this line callMethod: I will execute this line and then call MyClass->functionBB() functionBB: I've been called with these arguments (1, 2, 3) callMethod: I'm done with MyClass->functionBB() and now I execute this line callMethod: Method MyClass->functionCC() does not exist callMethod: No method specified!
Вы даже можете пойти дальше и создать белый список методов, но я оставляю его таким образом для более простого примера.
Вы больше не будете вынуждены делать методы частными и использовать их через __call (). Я предполагаю, что могут быть ситуации, когда вы захотите вызвать методы без оболочки или вы хотите, чтобы ваша среда IDE все еще автозаполняла методы, которые, скорее всего, не произойдут, если вы объявите методы как частные.
В настоящее время невозможно достичь того, что вы хотите сделать. Согласно сообщению в блоге на официальном блоге -
В настоящее время допустимые символы в настраиваемом URL-адресе ограничены: a-z, A-Z, 0-1. Доступны только специальные символы: подчеркивание, тире и точка.
blockquote>Поле «Метки» не имеет таких ограничений и позволяет использовать закодированные символы (например - https://tests-blogger.blogspot.com/search/label/%D9%8A%D9% 83% D8% АА% D9% 85% D9% 84 )