php_PHP チュートリアルでの動的呼び出しの手順

WBOY
リリース: 2016-07-20 11:10:12
オリジナル
1122 人が閲覧しました

動的呼び出しは PHP では高度なものと考えられています。今日は、この高度なアクティビティが何であるかを見て、必要な友達がどのようなものを参照できるかを見てみましょう。

プログラムに判定をたくさん追加すると大変なことになります!例:

コードは次のとおりです コードをコピー
if($fun='a'){echo "Oops!";}
elesif(){}
...
else{ echo "まあ! ";};

これは本当に面倒で、後からプログラムを読み込んで修正するときに非常に面倒です。

現時点では、関数を使用して、実行される各コードセグメントを実装できます。
その後、さらに NB メソッドを使用してこれらの関数を実装できます。
そして、各関数が関数を実装しているため、保守がはるかに簡単です。

本題に入り、PHP で関数を動的に呼び出す機能が何であるかを見てみましょう:
この $fun() のように、PHP で関数を動的に呼び出すことができます。PHP パーサーは、変数 $fun 、たとえば $fun='a' の場合、パーサーは a(); という形式を認識し、関数 a を呼び出します。具体的なコードは次のとおりです:

if($_action!=null&&$_action!=){ if(function_exists($_action) )){
コードは次のとおりです コードをコピー
//プログラムソース: PHP iask http://www.bkjia.com
// controller.php
(isset ($_GET['fun'])&&$_GET['fun']!='')?$fun=$_GET['fun']:$fun='def';

コントローラー($fun);

functioncontroller($fun){
if(function_exists($fun)) $fun();
else echo "関数 {$fun} が定義されていません";
}

function def() {
echo "ユーザーがパラメータを渡さないため、デフォルトの関数 def() が呼び出されます";
}
function a(){
echo "関数 a が呼び出されます! ";
}
function b(){
echo "関数 b が呼び出されます!

= (isset($_REQUEST[action])? $_REQUEST[action]:"");
eval("$_action();");

}else{

die(showErrMsg ( "
メソッド [".$_action."()]現在の php ファイルには存在しません。")); } } return "".$strMsg. "";}
?> function showErrMsg($strMsg){
?>





フロントページでは、さまざまなリンクを使用してさまざまな機能を実現できます。たとえば、次のようなリンクがあります
http://localhost/controller.php?fun=a
リクエストがcontroller.phpに到達すると、PHPプログラムが実行されます。 will 関数 a() は自動的に実行されます。

問題の重要な点:
最初にこのプログラムのページでcontroller()関数を呼び出すことです。この関数は、まずパラメータで定義された関数名 ($fun の値) が定義されているかどうかを判断し、定義されている場合はこの関数を呼び出します。
$_GET パラメータで fun が定義されていない場合: http://localhost/controller.php

デフォルト関数 def() を呼び出します;

このコードは簡潔で正しいですか?これらのコードをコピーして戻して、その効果を自分の目で確認できます。これらのコードは正常に実行されると断言できます。
しかし、残念なことに、実際には、この一見きちんとしたコードには、内部に大きなセキュリティ リスクが潜んでいます。非常に大きなセキュリティ リスクです。具体的には、明日の10時に公開予定の「PHPにおける動的呼び出し関数のセキュリティ問題について」についてお話します。 このコードをすぐにサーバー上で使用するわけではありませんよね。

さらに、テストにより、このメソッドは関数を動的に呼び出すだけでなく、次のようにオブジェクトを動的にインスタンス化できることが確認されました: $obj = new $obj();

http://www.bkjia.com/PHPjc/444729.html
コードは次のとおりです コードをコピーします
クラス A
echo ")n" : A::foo();
//parent :: foo();
}
}

$a = 新しい A( );
$a->foo();//新しいオブジェクトは
A::foo();//静的呼び出し、クラス名を使用して直接呼び出し、新しいオブジェクトはありません
$b = new B();
$b->bar();//オブジェクト $b で、A::foo(); が静的呼び出しを行います
B: :bar();
?>




概要: 静的呼び出しと動的呼び出しはどちらも、クラスとオブジェクトのメソッドの呼び出しを指します。動的とは、オブジェクトが作成されず、メソッドを呼び出すためにオブジェクト変数を使用することを意味します。クラス名。別のオブジェクトに関しては、クラス A、$a = new A()、$b = new B() のように、異なるクラスが異なるオブジェクトを作成します。別のオブジェクト。






http://www.bkjia.com/PHPjc/444729.html

www.bkjia.com

tru​​e

技術記事

動的呼び出しは PHP では高度なものと考えられています。今日は、この高度なアクティビティが何であるかを見て、必要なときにこの動的呼び出しが何であるかを判断してみましょう。 ...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!