web-dev-qa-db-ja.com

PHPのフックとは何ですか?

Googleで検索を試みましたが、適切なチュートリアルや記事が見つかりませんでした。

17
tasha-

PHPにはそもそもフックの概念がないため、おそらく何も見つかりませんでした。

フックは、既存のシステムにプラグイン(またはhook)してその機能を拡張できる一種の関数です。これらは、PHP言語または特定のシステムに固有のものではありません。プラグイン、アドオン、または拡張機能と呼ばれることもあります。

PHPにはフックの概念はありませんが、拡張機能をPHPコアと共にコンパイルして、 PHP拡張機能がデフォルトでバンドルされています。これは私が上記で説明したものの例です。

35
BoltClock

ええ、フックはネイティブではありませんPHPメソッド..それらは、フレームワークのコアから機能を拡張するために使用されます。

Codeigniterフック

8
Atticus

独自のPHPプロジェクトでフックをエミュレートできます:

1)次のクラスを作成して含めます。

class Hooks {

    private static $actions = array(
        'ev_after_user_create' => array(),
        'ev_after_user_profile_update' => array()
    );

    public static function apply($hook, $args = array()) {
        if (!empty(self::$actions[$hook])) {
            foreach (self::$actions[$hook] as $f) {
                $f($args);
            }
        }
    }

    public static function add_action($hook, $function) {
        self::$actions[$hook][] = $function;
    }

}

好みのフックの名前をそこに定義します。

2)コードでフックを使用できるようになりました。たとえば、新しいユーザーが作成された後にdo smthを実行できます(例):

//here is going any code which creates new user  
//hooks
Hooks::apply('ev_after_user_create', array('user_id' => $new_user_id));

3)次の方法でフックアクションを定義します。

Hooks::add_action('ev_after_user_create', function($args) {
    if (Router::$application === 'front') {
        require_model('users-data');
        $ud = new MUsersData(8);
        $ud->update_data($ud->create_page(), $args, 'id');
    }
});

すべてのフックアクションコードは、そのアクションが必要なコードの前に定義する必要があります

3
realmag777

SplObserver() など、いくつかの新しいSPL要素でオブザーバーパターンを実装できます。

作業が簡単になります。

3
alex