4

PHP 拡張機能のチュートリアルをいくつか行ってきましたが、既存の関数をオーバーロードする方法に関する情報が見つかりません。

たとえば、 fopen() を次のように変更したい

PHP_FUNCTION(fopen)
{
    if condition_is_true(condition)
        original_fopen();
    else
        show_error();
}

どうすればそれができますか?ありがとうございました

PS。私は拡張子を意味します(Cで書かれ、.soにコンパイルされ、.phpプログラムではなくhttpd.confに含まれています)


編集:Gordon リンクのおかげで解決策が見つかりました。

function の PECL パッケージをダウンロードしましrename_functionた。そのソースコードは、必要な結論に私を導きました:

  • function_table名前に基づいて、関数のすべてのポインターを保持するグローバルハッシュテーブルがあります。

  • zend_hash_find//これにより、このテーブルで必要な変更を行うことができますzend_hash_addzend_hash_del

4

1 に答える 1

-3

Zend Framework を使用している場合、すべてのリクエストは同じブートストラップ ファイル (通常index.phpはパブリック ディレクトリ内) を通過します。

これを使用して、という名前の新しいphpファイルを作成し、次のmy_global_functions.phpように含めることができます

require_once "my_global_functions.php"

そこに新しい関数を作成するだけです

function my_fopen(){ 
    if condition_is_true(condition)
        fopen();
    else
        show_error();        
}

my_fopenコードのどこからでも呼び出すことができるはずです。

于 2012-01-28T14:47:38.753 に答える