【PHP8.x】forward_static_call_array関数の使い方

作成日: 更新日:

forward_static_call_array関数は、親クラスやトレイトで定義されたメソッドを、現在のクラスではなく親クラスのスコープで静的に呼び出すために使用する関数です。この関数は、staticキーワードが評価されるコンテキストを制御したい場合に特に役立ちます。

PHPにおいて、通常staticキーワードを用いたメソッド呼び出しやプロパティ参照は、現在の呼び出し元のクラス(子クラス)のコンテキストで評価されます。しかし、forward_static_call_arrayを使用すると、あたかも親クラスが自身を呼び出しているかのようにstaticキーワードが解釈されます。これにより、親クラスのメソッドがstaticキーワードを用いて自身のクラス名やプロパティを参照している場合でも、意図した通りの振る舞いをさせることが可能になります。

この関数は、第一引数に呼び出したいメソッド名を指定し、第二引数にそのメソッドに渡す引数を配列として指定します。メソッドが実行された結果は、この関数の戻り値として返されます。

主に、子クラスから親クラスのprotectedprivateな静的メソッドを、親クラス自身のコンテキストで実行したい場合や、継承階層においてstaticキーワードの評価スコープを厳密に制御し、より柔軟で堅牢なクラス設計を実現したい場合に活用されます。

基本的な使い方

構文(syntax)

<?php

class BaseProcessor
{
    public static function processTask(string $taskName, array $details): string
    {
        return "Processing '" . $taskName . "' with details " . json_encode($details) . " in " . static::class;
    }

    public static function execute(string $name, array $parameters): string
    {
        // forward_static_call_array の構文:
        // forward_static_call_array(callable $function, array $args): mixed
        // ここでは、現在の静的スコープ (static::class) で 'processTask' メソッドを呼び出します。
        return forward_static_call_array([static::class, 'processTask'], [$name, $parameters]);
    }
}

class CustomProcessor extends BaseProcessor
{
    public static function processTask(string $taskName, array $details): string
    {
        return "Custom processing '" . $taskName . "' with details " . json_encode($details) . " in " . static::class;
    }
}

引数(parameters)

callable $callback, array $args

PHP:

  • callable $callback: 実行する静的メソッドを指定するコールバック関数。クラス名とメソッド名を指定できます。
  • array $args: 実行する静的メソッドに渡す引数の配列。

戻り値(return)

mixed

指定された静的メソッドを配列で指定された引数を用いて呼び出した結果が返されます。

【PHP8.x】forward_static_call_array関数の使い方 | いっしー@Webエンジニア