ホームページ >バックエンド開発 >PHPチュートリアル >カスタム関数ファイルを使用して別の PHP の関数を書き換える方法
プログラムのシステム ファイルを変更せず、将来のアップグレード中に変更されたファイルが上書きされないように、新しいカスタム関数ライブラリ ファイル extension.php を作成し、システムの起動時にこの extension.php をインクルードしたいと考えています。このようにして、extension.php のシステム関数を変更したり、extension.php に独自の関数を記述したりできます。
たとえば、
次のような 3 つの php ファイルがあります
a.php はシステム関数ライブラリ ファイルであり、変更することはできません
extension.php は独自のカスタム関数ライブラリ ファイルであり、自由に追加および変更できます
結果.php 関数ライブラリ ファイル
a.php
function show()
{
$str = 'this is a';
return $str
}
extension.php も書きました。 () 関数が含まれており、それを変更したい a.php の show() メソッド
function show()
{
$str = 'これは私の拡張機能です'
return $str;
result.phpここには上記の 2 つの php ファイルが含まれており、 show() メソッドを呼び出します
include 'a.php';
$result = show();
結果にアクセスしますこのような .php は、「再宣言できません」エラーを報告します。
名前空間を使用できるという情報をインターネット上で見つけましたが、その効果は私が望むものではないようです。
上記の a.php などのシステムの関数ライブラリ ファイルには触れたくありません。a.php 内の関数を変更できるように、extension.php カスタム関数ライブラリ ファイルを変更するだけです。できるかな?
ディスカッションに返信(解決策) システムの関数ライブラリを継承して、同じ名前の関数を作成します
$ 文字列 = 'this is a';
return $str;}
extension.php その中に show() 関数も書きましたが、a.php の show() メソッドを変更したいです
class extensions extends a{
function show ()
{
$str = 'これは私の拡張子です';
return $str; }
2 つのオプション:
1. ターゲット関数を直接変更します
あなた a.php のすべてを変更できないわけではありませんよね?
同じ名前の関数を呼び出すには、PHP 名前空間を使用することをお勧めします。
例を挙げてみましょう。
test/b.php
namespace testb;function test(){ return 'b.php';}
namespace testc;function test(){ return 'c.php';}
test/a.php を呼び出して
include('b.php');include('c.php');echo \testb\test();echo \testc\test();
<?phpfunction show() { if (function_exists('ext_show')) { ext_show(); return; } echo 'abc';}"書き換え" 関数は次のとおりです:
<?phpfunction ext_show(){ echo 'ext_abc';}
<?phpfunction show() { echo 'a.php';}function get() { echo 'a.php->get';}
まず a.runtime.php ファイルが存在するかどうかを確認し、存在しない場合は、上記のプロセスを実行し、$new_a を a.runtime.php に書き込み、次に Come in
をインクルードします。