phpの魔法の関数__call()はクラスで使用されます。同様の魔法の関数はありますが、代わりに関数用ですか?__autoload()のように関数用です。
たとえば、このようなもの
function __call($name, $arguments) {
echo "Function $name says {$arguments[0]} ";
}
random_func("hello");
phpの魔法の関数__call()はクラスで使用されます。同様の魔法の関数はありますが、代わりに関数用ですか?__autoload()のように関数用です。
たとえば、このようなもの
function __call($name, $arguments) {
echo "Function $name says {$arguments[0]} ";
}
random_func("hello");
いいえ、そんな魔法の機能は存在しないと思います。
これに対する 1 つの回避策は、関数を静的クラスに入れ、__callStatic
そのクラスに魔法のメソッドを追加することです (> PHP 5.3 のみ、恐れ入ります):
class Func
{
/** As of PHP 5.3.0 */
public static function __callStatic($name, $arguments)
{
// Note: value of $name is case sensitive.
echo "Calling static method '$name' "
. implode(', ', $arguments). "\n";
}
}
Func::random_func("hello!");
PHP < 5.3 の場合、同じことを行うことができますが、オブジェクトをインスタンス化し、__call
マジック メソッドを使用する必要があります。
$Func = new Func;
$Func->random_func("hello!");
いいえ。存在しない関数を呼び出すと、常に致命的なエラーが発生します。
** Zend 拡張機能がこれを でインターセプトできるかもしれませfcall_begin_handler
んが、よくわかりません。