前に書いてください
今週 ThinkPHP の学習を始めて、学習日記を記録してください。 TP の使い方を学ぶだけでなく、ソース コードから TP フレームワークを学びます。
毎日日記を書きますが、必ずしもオンラインに公開する必要はありません。頑張って耐えられるといいですね。
早速、ソースコードを読んでいるので、TP の確立と構成については詳しく説明しません。公式ドキュメントには詳細な紹介がたくさんあります。
TP を学びたい場合は、ThinkPHP3.2.3 クイックスタートをクリックして学ぶことができ、誰もが一緒に進歩することができます。
CURD操作
CURD操作とは何ですか?実際、これはデータベースの追加、削除、変更、クエリの略語です。これには、作成、更新、読み取り、削除という 4 つの基本操作が含まれます。 TP での CURD 操作の実装は、追加、保存、選択、更新です。
Think/Library/Model.class.php を開くと、これらの 4 つの操作が見つかります。次に、ソース コードを見てみましょう。実行中のプロセスを理解することによってのみ、これら 4 つの操作をより適切に使用できるようになります。
CUEDオペレーションのaddメソッド
addメソッドはデータを追加するために使用され、TPのcreateオペレーションの実装です。注意すべき点は、TPModel にも create メソッドがありますが、これは CURD 操作の一種ではなく、データベースに挿入されるデータの処理メソッドであることです。
パラメータ分析
add メソッドには次の 3 つのパラメータがあります (渡す必要はありません)
$data デフォルト値'' データベースに挿入する必要があるデータ $option デフォルト値 array() 式パラメータが格納されます実行されたすべてのデータ 連続操作$replace デフォルト値 false データベースへの挿入時に置換操作を実行するかどうか
戻り値は bool (false) または影響を受ける行数または主キー値の場合がありますデータベース内。戻り値から、この操作は連続操作の最後に行う必要があることがわかり、一連のコンボの最後の動きとみなすことができます。
プロセス分析
addメソッドの実行プロセスを4つのステップに分けてみました
- まず、データが空かどうかを確認します
- 次に、データ処理と式分析を実行します
- 上記はすべてデータを通じて挿入結果を返します挿入
- 返された結果を分析する
ステップ1 ユーザー登録操作を実行すると仮定し、データテーブルUserを挿入し、addメソッドを使用して操作します。ユーザーフィールドは次のとおりです:
主キー user_id ニックネーム user_name パスワード パスワード email
フロントエンド POST データ:
array( 'user_name' => 'xiamsahfw', 'password' => 'adhe99211' , 'confrim' => 'adhe99211' , 'email' => '221131@qq.com', 'hid' => 'register' );
UserController クラスの操作:
$data = I('post.');$User = M('User');$User->create($data);$User->add();
add 操作では、add にパラメータは渡されませんが、 in この値は $User->create($data) に渡されます。この操作では、データが Model の $this->data に自動的に追加され、add によってその値が自動的に参照されます。
同時に、create メソッドは、渡されたパラメーターとデータ テーブルのフィールドを自動的に比較し、テーブルに属さないフィールドを削除します。
ステップ 2 の後、add メソッドは $data を処理するために _facade メソッドを呼び出します。実際、$data データは create メソッドで処理されているため、ここで 2 回処理されます。 UserController で create メソッドが呼び出されず、 $data が add メソッドに直接渡された場合、 _facade は 'confrim' => 'adhe99211' 、 'hid' => 'register' を削除し、次のようになります:
array( 'user_name' => 'xiamsahfw', 'password' => 'adhe99211' , 'email' => '221131@qq.com' );For一貫した操作が可能な場合、add は式分析のために _parseOptions を呼び出します。式分析後にコヒーレントな操作が実行されない場合でも、戻り値には 2 つの要素が含まれます。
Array ([table] => user[model] => User)table は操作のデータ テーブルを表し、model は操作のモデル名を表します。
これまでにwhereやgroup byなどの連続した操作があった場合には、それらもこの項目に表示されます。さらに、コヒーレントな操作を add メソッドに渡すと、既存の操作とマージされます。
ステップ3 以上が実際にデータ挿入の準備作業になります。 準備作業が完了したら、データ挿入を実行できます。もちろん、TP ではデータの挿入は Model の機能ではなく、ThinkDriver.class.php の insert メソッドを呼び出す必要があります。
insert メソッドは 3 つのパラメーターを受け入れます
$data$option$replace最初の 2 つのパラメーターは、処理されたデータと結合されたコヒーレント操作式です。3 番目のパラメーターは、データベースに挿入するときに操作を実行するかどうかを示します。置換操作の場合、デフォルトは false です。このメソッドでは、渡されたデータを一貫した演算式と組み合わせて正式な SQL ステートメントを形成し、SQL ステートメントを実行します。最後に、実行結果が返されます。
ステップ4 戻り結果が得られますが、addは結果を直接返すのではなく、解析後の結論を返します。 insert によって返される結果には以下が含まれる場合があります:
failure=> false success=> 影響を受ける行の数を返すしかし、実際には、挿入が成功したという結論だけでなく、挿入後に主キーの値を取得したい。 addメソッドでは戻り結果を判定し、影響を受ける行数(挿入された複数のデータ)または主キーの値(1つのデータ)またはfalseを返します。
余談: データを挿入する前に、このコード行に気づきました。
if(false === $this->_before_insert($data,$options)) { return false;}
这里TP没有做任何注释,寻找之后,发现是一个空方法,解释为 插入数据前的回调方法
// 插入数据前的回调方法protected function _before_insert(&$data,$options) {}
将这个方法打印出来,结果为NULL
var_dump($this->_before_insert($data,$options)); // NULL
百度一下也没找到想要的答案,我对TP的官方文档并没有看完,可能官方会有用法的介绍。这里很纠结,我猜测是在子类继承时,可以实现这个方法进行某些特殊操作(很大可能)。与之相同的还有_after_insert方法。
总结
写了一大串,也不知道写的是不是很清晰,但是我的确是对这个方法熟悉了很多。这个方法虽然可以不传递参数,但如果之前没进行create还是会出错的,虽然内部集成了数据处理,但不是很完善,比如对数据没能进行转义,也不能够对数据字段进行验证,需要我们自己进行调用其它方法等等。知道了add的运行原理,自然能够很好的运用它,同时对自己封装模型类时也有了很大启发。
今天就写到这儿,下一篇准备写CURD中的read,也就是TP中的select。
博主大三狗,正在努力学习中,文中有错漏之处难免,欢迎指正,欢迎批评。

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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