ホームページ > バックエンド開発 > PHPチュートリアル > カスタム関数ファイルを使用して別の PHP の関数を書き換える方法

カスタム関数ファイルを使用して別の PHP の関数を書き換える方法

WBOY
リリース: 2016-06-23 13:11:44
オリジナル
1116 人が閲覧しました

プログラムのシステム ファイルを変更せず、将来のアップグレード中に変更されたファイルが上書きされないように、新しいカスタム関数ライブラリ ファイル 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 カスタム関数ライブラリ ファイルを変更するだけです。できるかな?




ディスカッションに返信(解決策) システムの関数ライブラリを継承して、同じ名前の関数を作成します
a.php

function show()

{

$ 文字列 = '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';}
ログイン後にコピー


test/c.php

namespace testc;function test(){	return 'c.php';}
ログイン後にコピー


test/a.php を呼び出して

include('b.php');include('c.php');echo \testb\test();echo \testc\test();
ログイン後にコピー



いいえ!
PHP はオーバーロードをサポートしていないため、あなたのアイデアは PHP では実現できません

上記の名前空間はこの矛盾を軽減できますが
、元のシステム コードを変更するつもりがないため、アプリケーション シナリオには適していません。関数呼び出しは元のシステムによって開始されます

リロード可能なシステム関数を設計するときは、次の解決策を使用します:
システム関数は次のように定義されます:
<?phpfunction show() {     if (function_exists('ext_show')) {        ext_show();        return;    }    echo 'abc';}
ログイン後にコピー

"書き換え" 関数は次のとおりです:

<?phpfunction ext_show(){    echo 'ext_abc';}
ログイン後にコピー


しかし、それはまだ現在のニーズとは異なるため、最初に a.php を処理するプログラムの使用を検討できます。以下は、ソリューションの簡単なテスト コードです。
<?phpfunction show() {    echo 'a.php';}function get() {    echo 'a.php->get';}
ログイン後にコピー

これは次のように最適化することもできます:

まず a.runtime.php ファイルが存在するかどうかを確認し、存在しない場合は、上記のプロセスを実行し、$new_a を a.runtime.php に書き込み、次に Come in
をインクルードします。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート