<?php /** * 摘取天上星 版 插件引擎 第二版 version 2.0 * By: 摘取天上星! * Emali: happy.yin@qq.com * Date: 2012升级版 **/ $plugin_arr=array(); $plugin_meta=array(); $plugin_remove=array(); $action_arr=array(); $action_meta=array(); $action_remove=array(); $idx=0; /* * 执行插件引擎中捆绑的所有函数事件(函数执行顺序参加addPlugin函数添加插件时的第四个参数数字,数字越大优先级越高) * $tag 要执行的函数集插件标签名 * $args 要往函数中传入的参数,依次按顺序填写,键名同addPlugin添加插件时第三个参数传入的键名、数量对应一致,键名对应的值即传入的参数值, * 该插件引擎是有返回值的插件引擎 */ function doPlugin($tag,$args=array()){ global $plugin_arr,$plugin_remove; $first=array_search(current($args),$args); if(empty($plugin_arr[$tag])) return $args[$first]; if(isset($plugin_remove[$tag])){ foreach($plugin_remove[$tag] as $func){ removePlugin($tag,$func); } } krsort($plugin_arr[$tag]); foreach($plugin_arr[$tag] as $plugins){ foreach($plugins as $plugins){ $plugins['args']=array_merge($plugins['args'],$args); $args[$first]=call_user_func_array($plugins['func'],array_slice($plugins['args'],0,$plugins['args_count'])); } } return $args[$first]; } /* 第一个参数为自定义标签集名, * 第二个参数是你要向标签集里添加的函数名, * 第三个数组参数为第二个参数strAndStr1函数对应的参数集,有多少个函数参数,就需要添加多少个数组元素, 参数按照先后顺序依次填写,键值为空即可,且插件里所有函数的参数个数必须一致,一个以上的参数,可多个, 这里的传参数组只需要预写好键名即可,在调用doPlugin插件时给对应的键值传入键名对应的实际参数值即可 * 第四个参数为排序参数,从1到10的纯数字,数值越大执行优先级越高,反之越小,默认为值为最大优先级10 * addPlugin('cleanText','strAndStr1',array('str'=>'','str2'=>''),1); * addPlugin('cleanText','strAndStr2',array('str'=>'','str2'=>''),2); */ function addPlugin($tag,$func,$args=array(),$sort=10){ global $plugin_arr,$plugin_meta,$idx; $plugin_arr[$tag][$sort][++$idx]=array('func'=>$func,'args'=>$args,'args_count'=>sizeof($args)); $plugin_meta[$tag][$func][$idx]=$sort; } /* * 立即删除函数集标签中 的某个函数 * 第一个参数为自定义函数集标签名称 * 第二个参数为要从函数集里 删除的单个函数名称 */ function removePlugin($tag,$func){ global $plugin_arr,$plugin_meta; if(isset($plugin_meta[$tag][$func])){ foreach($plugin_meta[$tag][$func] as $idx=>$sort){ unset($plugin_arr[$tag][$sort][$idx]); } unset($plugin_meta[$tag][$func]); } } /* * 在下次执行doPlugin时删除函数集标签中 的某个函数(在doPlugin中的插件函数执行前删除,并且删除后执行插件引擎!) * 第一个参数为自定义函数集标签名称 * 第二个参数为要从函数集里 删除的单个函数名称 */ function addRemovePlugin($tag,$func){ global $plugin_remove; if(in_array($func,(array)$plugin_remove[$tag])) return ; $plugin_remove[$tag][]=$func; } /* * 如下执行插件方法同上述有返回值的执行插件使用方法对应一致, * 唯一的区别是没有返回值 */ /* * 执行插件引擎 */ function doAction($tag,$args=array()){ global $action_arr,$action_remove; if(empty($action_arr[$tag])) return ; if(isset($action_remove[$tag])){ foreach($action_remove[$tag] as $func){ removeAction($tag,$func); } } krsort($action_arr[$tag]); foreach($action_arr[$tag] as $action_sort){ foreach($action_sort as $action_idx){ $action_idx['args']=array_merge($action_idx['args'],$args); call_user_func_array($action_idx['func'],array_slice($action_idx['args'],0,$action_idx['args_count'])); } } } /* * 向插件引擎里添加函数 */ function addAction($tag,$func,$args=array(),$sort=10){ global $action_arr,$action_meta,$idx; $action_arr[$tag][$sort][++$idx]=array('func'=>$func,'args'=>$args,'args_count'=>sizeof($args)); $action_meta[$tag][$func][$idx]=$sort; } /* * 从插件引擎里删除 执行的函数 */ function removeAction($tag,$func){ global $action_arr,$action_meta; if(isset($action_meta[$tag][$func])){ foreach($action_meta[$tag][$func] as $idx=>$sort){ unset($action_arr[$tag][$sort][$idx]); } unset($action_meta[$tag][$func]); } } /* * 添加预删除函数,该函数会在下次执行插件引擎时,在函数集调用前被删除 */ function addRemoveAction($tag,$func){ global $action_remove; if(in_array($func,(array)$action_remove[$tag])) return ; $action_remove[$tag][]=$func; } /* 摘取天上星 - 期待更深层次的扩展压缩...*/?>
//実行例は以下の通り
//プラグインエンジンで使用するテスト関数を用意するfunction str2str2($str){
return '
P タグ開始 '.$str.' P タグ終了
'function str3str3($str){
return 'b tag start'.$ str.' b tag end';
}
//注: 3 つの例をテストするときは、必ず 1 つずつテストしてください。そうしないと機能しません 異常な結果を生み出すプラグイン エンジンの権限優先順位の実際の比較をご覧ください。
例 1:
//str2str2 関数の実行優先度は str3str3 よりも小さいです。ここでは、str3str3($str) 関数が最初に実行され、次に str2str2($str) 関数が実行されます。//実際に実行されるプロセスは次のとおりです。次のように:
$str=str3str3( 'これはプラグイン内のすべての関数に渡されるパラメーターに似ています。ここでの関数 str3str3 の実行優先順位は str2str2 よりも高くなります');
echo $str;
/*ブラウザで出力結果を表示 HTML ソースコードは次の内容を取得します:
P タグの開始b タグの開始 このようになります。プラグイン内のすべての関数に渡されるパラメーター。ここでの関数 str3str3 の実行優先度は高くなります。 str2str2 で終了 P タグで終了
'cleanText','str2str2',array('str'=>''),1);addPlugin('cleanText','str3str3',array('str'=>''),10); echo doPlugin('cleanText',array('str'=>'これはプラグイン内のすべての関数と同様です。渡された関数 str3str3 の実行優先順位は str2str2 よりも高くなります'));
//例 2:
addPlugin('cleanText','str2str2',array('str'=>''),10);
addPlugin('cleanText','str3str3',array('str'=>''),1) ;
echo doPlugin('cleanText',array('str'=>'これはプラグインのすべてと同様です。関数によって渡されるパラメータです。ここでの関数 str2str2 の実行優先順位は str3str3 よりも高くなります' ));
/*操作結果のHTMLページのソースコードは以下の通りです
bタグstart
パラメータと同様です。プラグイン内のすべての関数に渡される関数 str2str2 の実行優先度は str3str3 よりも高くなります。
*/
//例 3:
addPlugin('cleanText','str2str2',array('str'=>''),1);
addPlugin('cleanText','str3str3',array('str'=>'') ) ,1);
echo doPlugin('cleanText',array('str'=>'パーミッションソート値が同じサイズの場合、後続の関数のパーミッション優先度は前の関数よりも小さくなります、最初に追加された関数が最初に実行されます。ここでは関数 str3str3 実行優先度は str2str2'));
/* 実行後の HTML ソース コードの結果は次のとおりです:
Pタグ開始 パーミッションソート値サイズ 一致した場合、後続の機能パーミッションの優先度が前のものよりも低いため、最初に追加した機能が先に実行されます。 function str3str3 は str2str2 よりも下位です。 P タグの終了
// doAction 実行プラグインのテスト例 (このプラグインには戻り値、実行のみ! )
/*注、このプラグインは戻り値プラグインであるため、出力または直接実行にのみ使用されます。優先順位は doPlugin プラグインの優先順位設定と同じなので、ここでは説明しません。詳細!
関数alertstr($str){
echo "<script>alert('$str');</script>"
}関数alertstr2($str){
echo $str.'1+2' ;
addAction('alert','alertstr',array('str'=>''),1);
addAction('alert','alertstr2',array('str'=>'') ),10);
doAction('alert',array('str'=>'ポップアップするパラメータ'));
//実行後の HTML ソースコードの結果は次のとおりです:
//パラメータ1 ポップアップする +2<script>alert('ポップアップするパラメータ');</script>
?>

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール
