web-dev-qa-db-ja.com

インククルードファイルを含むregister_activation_hook

私は次のコードで私の髪の毛を伸ばしています、助けてください。 3ファイルあります。

File1.php:

Class File1 {
    public function file1_register() {
        //register some short codes;
    }
    public function file1_unregister() {
        //unregister previous short codes;
    }
}
Class File2 {
    public function file2_register() {
        //create some database tables.
    }
    public function file1_unregister() {
        //delete previous tables.
    }
}
function MyActivation() {
    include_once (dirname(FILE).'/file1.php');
    $File1 = new File1;
    $File1::file1_register();
}
register_activation_hook(FILE, 'MyActivation');

関数file1_registerは動作を拒否します。最終的にはfile2_registerも実行したいのですが、現時点では、コードにエラーや問題があることはわかりません。

1
user31108

メソッドを静的メソッドとして登録するように定義すると、クラスのインスタンス化を回避したり、ex MyActivation関数exを呼び出したりすることを回避できます。

File1.php:

Class File1 {
    static function file1_register() {
        //register some short codes;
    }
    static function file1_unregister() {
        //unregister previous short codes;
    }
}

File2.php:

Class File2 {
    static function file2_register() {
        //create some database tables.
    }
    static function file1_unregister() {
        //delete previous tables.
    }
}

MyPlugin.php:

include_once dirname( __FILE__ ).'/File1.php';
register_activation_hook( __FILE__, array( 'File1', 'file1_register' ) );
include_once dirname( __FILE__ ).'/File2.php';
register_activation_hook( __FILE__, array( 'File2', 'file2_register' ) );

またはは、単に現在のMyActivation関数の "Paamayim Nekudotayim"(::)を矢印演算子( - >)に変更します。これはこの行を置き換えることを意味します。 :

$File1::file1_register();

これとともに:

$File1->file1_register();
2
Bainternet