2012-01-28 4 views
3

私はいくつかのPHP拡張チュートリアルを行ってきましたが、既存の関数をどのようにオーバーロードするかに関する情報は見つかりませんでした。PHPエクステンションから関数をオーバーロードする方法は?

例えば、私はそれを行うことができる方法

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

のようなものにはfopen()を変更したいですか? ありがとうございます

PSです。 、ゴードン・リンクのおかげで解決策を見つけた:私は(Cで書かれた、.soのようにコンパイルし、httpd.confで含まれ、ない.PHPプログラム)拡張


に編集を意味します。

私は機能rename_functionのPECLパッケージをダウンロードしました。そのソースコードが必要との結論に私をリードしてきました:

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

  • zend_hash_find/zend_hash_add/zend_hash_delこの表で私が望むすべての変更を行うことができます。

+1

私はあなたがそれを許可されることを真剣に疑っています。それはPHPに組み込まれたいくつかの関数に聖なる地獄を引き起こして、突然予想外の振る舞いをする。 – GordonM

答えて

-2

あなたはZend Frameworkのを使用している場合は、すべての要求は(あなたの公開ディレクトリに通常index.php)同じブートストラップファイルを経る

あなたはmy_global_functions.phpと呼ばれる新しいPHPファイルを作成するために、これを使用してのようにそれを含めることができます

require_once "my_global_functions.php" 

今ちょうど

function my_fopen(){ 
    if condition_is_true(condition) 
     fopen(); 
    else 
     show_error();   
} 
のようにそこに新しい関数を作成します

コード内のどこからでもmy_fopenを呼び出すことができます。

+1

私は自分の質問に注釈を追加して、少し明確にする。 conf、.phpスクリプトではありません) – Vasisualiy

関連する問題