[音楽再生] デイビット·J·マラン:すべての権利。 これはCS50です。 これは、週8のスタートです。 そして、あなたは私たちがオフに左ことを思い出すかもしれ 前回新しい言語を見て 完全に。 実際には、かなりのOne 軽量、それもありません プログラミング言語。 それは、私たちをことができますマークアップ言語です 実際にWebページを構築してください。 とするとき、他に何か this--と一緒に またはあなたはすぐでしょう、もし あなたはすでに持っていない。 私たちは、カスケーディングを使用するつもりだ スタイルシート、またはCSS、どの 言語別のタイプである プロパティと値を持つ それは私たちがやらせるために起こっている 色を変更するようなもの 位置を変える と微調整これらの種類。 しかし、今日以降、私たちはし始める より強力な言語に焦点を当て、 PHPのような実際のプログラミング言語。 だから、PHPはしばらくの周りされています。 そして、あなたは、それを見ることができますように 主に設計されました 早い段階で実際のために Web開発で使用 実際にWebページを生成する。 だから何の種類の 機能には、言語を行います ウェブを作るために必要 動的にそれを使用したページ? 言い換えれば、あなたが生成したい場合は、 Facebookのようなコンテンツdynamically-- 常に変化ニュースフィード、または 時からポップアップするインスタントメッセージ 何のようにtime--する 機能性の重要な部分 あなたがプログラミング言語で必要 それは、動的にあなたを聞かせて 画面に新しい情報を印刷? 学生:コード。 デイビット·J·マラン:コード。 [OK]をクリックします。 我々はそれを取るよ。 もう少し正確に。 私は意味、私たちは何ができる 率直に言って、Cを使用して、この。 これは、首の痛みになります。 このコミットメントはBut--のですか? 学生:うん。 変数、多分? デイビット·J·マラン:変数。 [OK]を、確認してください。 変数は、確かに私たちを助けることができます。 そしてさらに簡単なもの。 我々は非常に最初にそれを使用して 初日のプログラム 私たちは実際に "Hello World。"と言ったとき 学生:印刷。 デイビット·J·マラン:印刷、右? 印刷、または中のprintf C.だから、このすべての時間の世界で、 我々は我々で持っていた 処分language-- C、 particular--でさえ そのことについてはスクラッチという テキストの文字列を生成することができます。 HTMLの場合にはまあ、我々は先週見たように、である テキストの文字列のちょうど全体の束 オープンブラケットと閉じたとはいえ ブラケットと韻のいくつかの種類 そしてその背後にある理由は、 よくして私たちは本当にできた いずれかのWebページの生成を開始 手動でgeditの中でそれらを入力して、 またはMicrosoft Wordで、そのための 私たちは単なるテキストエディタが必要matter--。 または私達は、コードを書くことができます あなたの提案に 以前、それは私たちをみましょう 動的にHTMLを生成、 そしてそれは我々が行っているものだ PHPでやって起動する そして最終的にさえ付き JavaScriptが呼ばれる言語、 別のものを生成するために一つの言語を使用しています。 そして実際、これは何のFacebookです そして多くの、多くの他のサイト 実際に動的に行うこと あなたに新たな情報を表示する。 それではthis-- Aで始めましょう 不可解な探してラインが、一 それは実際にはかなり強力です。 これまでのところ、我々は、Cを使用してきた、 そのコンパイル言語です。 そして、ちょうど迅速recap--は、コンパイルされた 言語は何な特性を持って? あなたは明らかにコンパイルする必要が それは、それは何を意味するのでしょうか? うん? STUDENT:それはする必要がある マシンコードにアセンブル。 デイビット·J·マラン:OK。 これは、組み立てする必要があります マシンコードに変換する。 それで、あなたは、あなたのソースコードを取る その英語に似たの一種である。 あなたはにそれを変換する 何か低いレベル、 最終的に呼び出される オブジェクトには、0と1 code--。 そして、それは、これらの0年代と1のその CPUは、Intelによって作られたもののように、 実際に理解しています。 さて、PHPやPythonとRubyと JavaScriptやその他の束 言語はコンパイルされません 言語が、言語を解釈し、 その意味あなただけのそれらを入力し、 あなたは0と1にそれらをオンにしないでください。 代わりに、同じようにそれから提供 誰か他の人のプログラムへの入力、 インタプリタと呼ばれる。 そして、その人の プログラムが設計されています 何それぞれを理解する PythonやPHPのすべてのシンボル Rubyや任意の数または 他の言語を意味します。 そして私たちが必要とするすべてがある このような何か。 だから実際には、私はするつもりだ アプライアンスにオーバー行く ここでは、ただの中へ 古いウィンドウ、そして我々だ 先にオープンに行くつもり というファイルが、こんにちは、と言う。 さて、以前、私が保存されている可能性があります この場合でもファイル拡張子を持つ、 しかし、私は何をするつもりです ここにさらに簡単なもの。 私が先に行くと開始するつもりだ この不可解な構文では、このファイル。 だから、「ユーザー、ビン、ENV、 環境のため、PHP。」 これは、単にのコードの1行です 私のオペレーティングシステムを言うつもり、 お近くに探しに行く つまり、どのような環境 PHPはinterpreter--をis--どこ と先に行くと、そのインタプリタを使う 次のコードを解釈する。 さて、これは一種のです PHPの醜い機能。 しかし、この言語では、どの 時間はあなたが、PHPコードを書く あなたはこれらの醜いの一つを持っている必要があります 先頭を画定PHPタグ あなたのcode-- <?phpのの。 しかし、ここの下に、私は今何かを行うことができます printfのハローコンマのような、非常に簡単 世界のバックスラッシュnは近い 引用符、閉じ括弧。 その後ちょうど良いため 対策は、私は行くよ 先と密接行く こっち私のPHPのタグ その結果、すべてのルックス きれいにきれいに印刷。 とすぐに私は、[保存]をクリックしますように geditのは十分に実際にスマートです まさにその最初の行を見てと 実現する、ああ、あなたがPHPコードを書いている。 てみましょう私の構文ハイライト それ色 ここにそれが立っているように、 もう少し外。 しかし、今私は行くつもりです 私のターミナルウィンドウにダウン。 私は、ズームインします。 このプログラムは、「ハロー」と呼ばれていた 私は、ハロードットスラッシュをするつもりです しかし、権限が拒否されました。 そしてbashの。 私たちは、実際にそのことを聞いた 事数週間前 シェルショックの状況において、 それらのバグの一つ。 しかし、権限は我々が見てきたが拒否 多分別の文脈で、前に。 誰もがどのように思い出すん あなたが何かを修正するかもしれない 許可は、次のように拒否された場合に? 少なくとも、コマンドは何ですか? STUDENTます。chmod。 デイビット·J·マラン:うん、chmodの、 ファイルのモードを変更する。 そして、あなたはすべてのそれ以上に慣れるでしょう その後の問題でこの来週 設定してください。 しかし、今のところ、私は変更するつもりです 読めるようにしないモード、 みんなのexecuteabilityを与えるために 権限、能力 このファイルを実行します。 そして、私は割り当てるつもりです ファイルへの挨拶。 私は今あなたが、入力したハロードットスラッシュない場合 実際には、参照して、私のプログラム、Hello Worldの。 そして、何のステップは、私がやった 明らかに完全にスキップ? コンパイル。 だから、僕は非常に単純にこのプログラムを実行しました。 そして、それはあなたがでこれを行うことができます判明 C.を彷彿とさせる構文の多く 私は、今日のコードにで行こう、 その私は私のバーチャルホストディレクトリに置く ここでは、本当の理由のために 我々は戻って来る。 そして、私は、入るつもりだ 条件1、の言わせて。 そして、あなたは最初に、ここに表示されますと、 何よりも、コメントの全体の束。 しかし、これは実際にある PHPの再作成 私たちは一週間でやったプログラムの 1と呼ばれる条件1.C ここでの目的で このプログラムの人生 尋ねることは明らかである 整数のためのユーザー その後いくつかのふわふわを行う その上で分析することにより それはポジティブだ場合、またはあなたが言う 負またはゼロに等しい。 そして、私はこれだけを持ち出すので、 多分一つの小さなディテールを除いて、 それは、これまでCから区別がつかないです 一つの特徴は何ですか ここでその多分飛び出し 少し違うとしてあなたは? 多分二つのこと。 うん? 学生:ドル記号nは? デイビット·J·マラン:うん。 だから、ドル記号nが存在している。 としてドル記号、 我々は、表示されますしようとしている 先頭に修正すべき PHPで任意の変数の。 これは、両方の良いとbad--良いことだ それは一種のは明らかだ何だということ それはだという点で悪い変数、 さらに別のものが入力します。 そして、他の1があります 我々はなく、かなり持っているもの 少なくともこのスペルによって、見られる。うん? 学生:Readlineの。 デイビット·J·マラン:Readlineの。 私たちは、それ自体が、見ていないのreadline 何かがそこに存在していても、C、 類似したが、我々はにgetStringを使用しました、 これはその対応物である。 だから私はこの中に行けば であることを起こるディレクトリ、 私は私のバーチャルホスト内のビットに説明しますように ディレクトリと私のソースディレクトリ、 と私は先に行くと、ドットスラッシュを行う conditions-- whoops--ドットスラッシュ 条件1、あなたは再び、わかります、 同じissue--パーミッションが拒否されました。 だから私はズームインしましょう​​とプラスします。chmodやる 条件は、ドットスラッシュ条件のx。 私は50、整数をお願いしたいと思います。 そして、我々はこれをプレイできる ゲーム一日中。 それは、正確に動作するように起こっている それは週1で行ったように。 を除いて、[OK]をので、すべてその違いはない 構文だけではなく、そのわずかなビット、 しかし上部に、私を再び この行を持っていた 私はその何かを作成することが許可された 、ハローと呼ばれるCプログラムのように見える 条件1と呼ばれる。 しかし、それは0とものではありません 私が直接実行するよ。 それは、代わりにこれを実行している 名前はインタプリタ 言語と同じであることを起こる。 プログラムは、私のコードはPHPと呼ばれ、 行の下に1はそれに渡されている。 私たちは別のかなり単純なを行うことができます 何かを連想させる例 我々は数週間前にやった。 再び、これは一種である コー​​ドの任意のチャンク それは明らかにしない あなたはそれが何を実行したとき? これは何は、おそらく、印刷するために起こっているのですか? だから、当初は16行目に、それはだ xはおそらく、今2であると言うつもり。 %dはprintfのための$ Iと同じです。 だから、それは乗する'S、ドット、 ドットは、17行目では、点在しています。 その後18が表示され、ライン 機能Cubedのを呼び出します。 とcubedはどこに定義されている? まあ、それは、25行でどのように見える だから、すべてのことが異なるではありません。 私は上記のいくつかのコメントを持っている それは、ほとんどの部分について、 それはかなり簡単だ 移植または変換 PHPバージョンのCプログラムから。 しかし、今のがいくつかあります 多分飛び出すべきです違い。 他に何することで、どの程度異なっている C言語でこれと同じプログラムを書くのでしょうか? 学生:[聞こえない]。 デイビット·J·マラン:あります トップアッププロトタイプません。 だからPHP--と率直に言って、 現代のlanguages​​--たくさんの たくさん賢く、より有用である そのあなたのCコンパイラより ここに機能を置くことができ、 あなたは、ここでダウン機能を置くことができます そしてインタプリタが起こっている あなたの読書の賛成を行うには ファイル全体、それが決定する前に いくつかの関数が存在しないこと。 年後にとても素敵な改善。 しかし、また何かが 他に異なる、またはここに存在しない。 うん? 学生:[聞こえない]。 デイビット·J·マラン:我々はする必要はありません 変数の型を宣言し、 私たちは長い間その前に表示されます PHPのさまざまなタイプがあり、 しかし、あなたは、それらを指定する必要はありません、 これも良い面と悪い面の両方です。 そして行方不明1他の事はあります。 学生:何のライブラリがありません。 デイビット·J·マラン:なしライブラリはありません。 [OK]を、ので、それはうれしいです。 私たちは、箱から出して、より多くを得る。 だから、実際にはもっとたくさんあり​​ます 思ったより物事が異なっていた。 どのように後ろに道はどうですか? 何それ? もう一度それを言う? 学生:ポインタ。 デイビット·J·マラン:いいえポインタ。 OK、少なくともこの例では、ノー。 それはフェアだ。 だから、ポインタが存​​在しない 実際に一般的にPHPで。 何か呼ばれる参照がありますが、 しかし、我々はそこにあまりにも多くの時間を費やすことはありません。 そして他に何? 学生:メイン。 デイビット·J·マラン:メイン。 だから、これはとても重要だった 私が考えていた。 全くメインエントリポイントがありません注意してください。 あなたは、単にあなたのコードを書き始める。 そして、これは実際にある 有利になるだろう 我々は、移行時 一瞬、実際に使用する Webベースのためのこの同じ言語 私たちのためのプログラミング、 ただ一つのエントリ·ポイントを持っている必要はありません。 私たちはの束を持っているしたい場合があります URLは、異なるファイルの束 すべてのユーザー入力を取り込み そして出力を生成する。 しかし、ここでは非常にがっかりするものである たとえば私は、最後の時間を約束していること すなわち、このフォルダ内の ここでは、スペルミス。 これは、このファイルのスペルチェックでだから私たち があり、上あまりにも多くの時間を費やすことはありません 本質porting-- P-O-R-T。 それは、たとえば特定の言葉だけだ あなたは一つの言語から変換する 手動で通常別。 これは、PCの移植である PSET 5からのスペルチェックのバージョン。 そして、私は基本的に変換しようとした として密接に私ができるようラインによってそれライン。 ですから、この種のものを好めば、 実際にはいくつかの点で価値がある 並べて、それらの両方を引き上げ サイドと同じだものを見 と異なるものだ。 しかし、彼らはかなりくそ似ています。 あなたが覚えていれば何 スペルさえ、ように見えた あなたはしませんでしたにもかかわらず、 このファイルを変更する必要があり、 それはかなり似ています 構造的にちょうどカップルと あちこちの変更。 だから、これは唯一のそれはかなりだと言うことです スペルに変換するのは簡単 CからPHPへ。 しかし、辞書に、あります さらに魅力的なもの。 私が先に行くと、作成してみましょう 私自身のdictionary.phpファイル。 その中のSO若干異なる 我々は.Cの代わりにそれを.phpを呼ぶことにします。 これはPHPのファイルであるため、私は 少し持っているannoyingly-- do-- を使用してファイルを開始する そのようなPHPタグ。 そして、私は先に行くつもりです そしていくつかの関数を定義します。 あるチェック、呼び出された関数 前のような言葉で取るつもり。 しかし、この引数の ドルを持っているつもり 私たちは、再び、PHPを使用しているので、ログインしてください。 から別の関数 dictionary.cは、負荷だった そしてそれは、辞書の名の下に取った 私は行く準備ができて、その機能を得るでしょう。 dictionary.cにおけるもう一つは何でしたか? サイズは、素敵なものの一つであった 少なくともあなたの周りいくつかの変数を保持していた場合。 そうサイズがちょうど変数を返すために持っています。 その後、アンロードがあった。 だから、これらの4つがありました 問題の関数は5を設定 あなたが実装するために必要なこと いくつかのデータ構造または構造。 だから私はであることを約束した PHPは、我々は宣言できます ハッシュテーブルは、例えば、 すべてのことがより簡単に。 実際、私はハッシュテーブルをしたい場合は、 私はちょうどそのように行くつもりです と私のハッシュテーブルがあります。 そして、それはノートでは、がっかりするものだ 我々は、最後の時間にオフに残した。 私が欲しかった場合、あなたは、何を知っている サイズ可変の、よく、 この1だけではありません Cからの、異なる、 しかし、私は先に行くとそれを行うつもりです。 とはデータの種類を気づかない。 そして、私は後で戻って行くよと 実際に、ここでいくつかのコメントを追加します。 しかし、どのような負荷はどうですか? もしドル記号辞書 私のファイルの名前です そして私は実際にロードしたい 今、このテーブルへの言葉、 私は実際に行うことができます かなりシンプルなもの。 ボックスで探して、これはminorlyです PHPでannoying--、 あなたが内側に指定する必要が あなたの場合、関数の いくつかのグローバルにアクセスしたい 外で定義されています変数。 しかし、それは特にありません 今は興味深い。 何より興味深いのは、これはそれぞれのためのものです 私は最後の時間を言及することを構築する。 そして、PHPの機能を有することが判明 その目的は生活の中で呼ばれるファイル ファイルを開いて読み込むことです その行のすべての配列に そして背中にそれらを手渡す。 私は辞書を行うことができます言うことである それが今効果的に私は、ファイルを呼び出すときに、 これは私を手に起こっている ファイルからの単語の配列。 それはすべての良いことではありません。 それはまだラインになるだろう 言葉の、直線的なもの。 しかし、私は先に行くと、繰り返すことができます 使用して、これらの各単語の上 その構文は、我々は簡単に最後の時間を見た。 そして、あなたはより多くのそれが表示されます 今後のPSETで。 しかし、今私は、ループ反復を持っている 辞書中の各単語の上。 各反復で、私は思い出す 現在の単語を呼び出す」という言葉を。」 そして、すべてのそれはに連れて行くために起こっている 辞書に単語を入れている 単語の推測になるだろう「真。」 それは私のinsert関数です。 それは私のロード機能です 私の辞書のために。 今ではのでチートのビットですが、 あなたが実際に何があるか、知っている 言葉の終わりにバックスラッシュn個の 私はおそらくを取り除く必要があること、 PHPが持っているので、それは問題ではない チョップどの文字通り呼ばれる関数 最後の最後に1文字ずつオフチョップ。 だから、そこには問題ありません。 我々は先に、実際に行ってきた そのちょうどこのに短縮。 そして今、私はおそらく追跡する必要があります サイズのために、そうしてみましょう少なくともthis--を行う サイズ++。 私は以前のようにそれを行うことができます。 その後これはおそらくしようとしている それではtrueを返すように、うまく動作。 Doneを。 PSET 5。 [笑い] デイビット·J·マラン:OK。 我々は再びそれをやろうとしている 次のPSETで、あまりにも。 だから、どのようなサイズはどうですか? さて、これはうまくいけば約ある あなたが最後の時間を期待するように、 私がしなければならないものの、 この愚かなグローバルなもの。 それはからわずかアーティファクトだ 言語のデザイン。 しかし、チェックはもう少し興味深いものです。 だから私はドルに渡された場合 私は最初、言葉に署名 へのアクセスを許可する そのグローバル変数テーブル。 そして今、私がしたい場合は、 単語がある場合には、確認 それが事実である場合、私は単純に言うことができます 以下のテーブルに設定され、 その後、先に行くとリターン はtrue。他に、falseを返す。 Doneを。 PSET 5の他の半分。 すべての権利なので、再び、私は今 いくつかのコーナーをカットする。 公平に、私はおそらくべき さらに数秒を過ごす この実装について。 そして私はおそらく、すべてのモックべきではありません あなたはそんなにPSETに置く時間。 そこでstrtolowerは関数である。 何か似た実存主義 Cでは、少なくとも文字を、 しかし、PHPのは、文字列全体のバージョンを得た。 つまり、すべてのものを強制するために起こっている あなたのそのいくつかを小文字に 何を正規化するために行われたかもしれない あなたの辞書に入れた。 そして今、あなたはあまりにも、C言語でこれを行うことができます。 これは、PHPとは何の関係もありません。 しかし、いつでもあなたが持っている ブール条件、 ライン上で何かのように だけでそこに10、 trueに評価しようとしてか、 明らかにそれ以外の場合はfalse、そしてあなた 私は、trueまたはfalseを返している可能性が 単に本当にこのセクシーを作る そしてちょうどこのような何かを行う。 私のチェック機能がありますように。 右、もしブール 、trueまたはfalseを返します ちょうどすぐにそれを返してみましょう。 やその他のいくつかの微調整があります 私はあちこちで作ることができます。 Load--アンは、ところで、それは完了です。 そこには何の関係もありません。 メモリのすべてにおいてので PHPと他の多くの言語 実際にあなたのために管理されている。 C言語のに対して、ほど あなたは痛いほど学んだ、 何でもあなたのmallocやcallocはや reallocのは、あなた自身を解放しなければならない。 あなたははfopen何でも、あなたはfcloseはしなければならない、 リソースは、最終的に解放されるように、 とValgrindのようなツールにはありません 気づくと文句を言わない、 その彼らに実行するように良いことです。 しかし確実に、そこになければなりません 右、いくつかのキャッチも? そうでなければ、我々は一種の無駄 週の全体の束。 だから、任意の数の理由があります なぜ我々は一種の、この軌道を取る しかし、トレードオフが存在する。 右、これはテーマ別でした。 だから何のトレードオフかもしれない ここで、CからPHPに、移動する? すべては、これまで以外の勝利のように感じている ここかそこ醜さのビット。 うん。 何それ? 学生:[聞こえない]メモリ。 デイビット·J·マラン:スピード。 [OK]をクリックします。 さて、私のスピードはかなり速かった。 右? しかし、プログラムの実行速度は? [OK]を、ので、それは公正なポイントだ。 だから、私は事前に、起こるだろうとして 私のトライソリューション、1の両方をキューアップ 私は、大きなボードに持っていた トライベースのソリューションだった、 そして私はここで、このディレクトリにそれを持っている。 だから私はその瞬間に、私は先に行くことができると 欽定訳聖書でこれを実行し、 Enterキーを押す。 そして、これがうまくいけば正しい 最後に実装、 合計で私に時間を与える そのために0.38秒 1幾分任意の例。 そして、私は今、この中に行けば 第二ターミナルウィンドウ ここで私が最初にしましょう​​、geditのを開いたところ 私は、その、再び今日のcode--に入る here--このディレクトリ内にあり、 私が先に行くとスペルチェックを実行してみましょう。 だから、明確にする これはPHPのバージョンです。 私はちょうどここにそれの上を示すよ。 だから私はチルダCS50のスペルチェックを行う場合 PSET 5テキスト、キングジェームズは、次のように入力します。 それはまだ書き込みよりも高速だ C言語では、それが、合計時間 一方、告知、0.93であり、私の C言語ベースの実装では0.38だった。 だから、非自明な違​​いだ。 そして、これは1つのファイルだけである。 次の2つを実行した場合 ビッグボード対プログラム と入力の全体の束を持っている テストされ、これは確実にアップする追加します。 そして、我々は、より大きなデータセットを有する場合 これは、あまりにも、すべてのより多くを追加します。 そうです、いくつかの代償を払う 速度が確かにそうである。 他には? うん? 学生:RAM使用量。 デイビット·J·マラン:RAM使用量。 だから私は一秒を与えていない このPHPを書くときに思った どのくらいまでのようなバージョン 私が使っていたメモリ。 私は完全にPHPにそれを延期してい 自身と誰でもそのプログラムを書いた。 そして、それはOKかもしれませんが、 しかし、私の場合、実際に本当に 同じくらいの性能を絞る気 私のプログラムのうち、または私のウェブサイトのうち、 または何のツールのうち、 私は多分、作っている PHPは、確かに、右の言語ではありません。 実際には、それがために、なぜ インスタンス、多くのWeb servers-- その実際のプログラム ウェブを果たすcontent-- PHPで書かれていません またはPythonやRubyで。 これらは同じように、書かれています あなたは今、PSET 6でやる あなたは絞ることができるように、C言語で それから、パフォーマンスのすべてのビット 本当に行使 何オーバーきめ細かい制御 下に起こっている フードとちょうどそれを取らない 付与されたいくつかのより高いため レベルのデータ構造。 結局、考えてみましょう、 誰でもPHPで実装 ハッシュの概念 それは実際にはもっとだtable-- 適切に連想と呼ばarray-- 彼または彼女はどのような種類の任意のアイデアを持っていません 入力のあなたがあることを行っている 構造体に入れて? だから、明らかに、右ではない? それは、一般的なツールだ のツールキットで したい人に提供 それを使用し、そう確かにする 最終的に最適化することができません 正確にあなたがやりたいことのために。 だから、トレードoffs--開発時間かもしれない パフォーマンスが異なる場合があり、異なる、 複雑またはメモリ使用量が異なる場合があります。 だからあなたは何を見つける ますますがあることである 異なることになるだろう 貿易のためのツール。 そして実際にはスーパーの大多数のための このクラスの人々の最後のプロジェクトは、 それを信じるかどうかは、Cは起こっていません 使用するために適切な言語であると。 持ち帰りのと、実際には、1 最終的にこのような任意のクラスのために あなたが考える得ることです、 さて、あなたは何をやってのける必要があります あなたが望む棚 いくつかの問題を解決する。 そして実際、私たちはこの橋を渡るだろう さらに私たちはより多くの言語を見てのように 今日でも超えた。 だから今までの推移をみましょう おそらく、もっと身近コンテキスト PHPのような言語を使用するため。 それはで使用するやや一般的です スクリプトを書く、コマンドライン、 のような私でしたが、それはだ はるかに、はるかに一般的な。 そしてそれはで使用されることを意図した 一般的に終わるファイルの形式 中.php--それはだ いないprerequisite-- 自体はウェブコンテンツを生成する。 だから私は先に行くといくつかを開いてみましょう Iは、予め用意例。 そしてこれらは、実際には一種の真である 最初のもののその1での物語 私が今までに終了した後に自分自身をやった CS50とは多分、私が思うに、 CS51年前の私です ルームメイトと私は助けられた 新入生学内を実行する 一度にスポーツ番組、 新入生は、さまざまに登録した 一枚の紙に記入して、スポーツ、 それが呼ばれたように、歩いて ウィッグルスワースの庭を横切っ、 そして、いくつかの上にドロップする プロクターのドアのドロップ。 そして彼または彼女が通って行くだろう 彼らと、実際に手動でメールでお問い合わせ 我々はいくつかのスポーツのために登録されたこと。 そうはっきり、機会 改善のため。 これらの日、あなただけになるかもしれない Googleのフォームが、バックの日で、 私たちは実際にこのfor--到達しなければならなかった でも、そんなに長くago--到達されなかった プログラミングのための PHP言語ではなかった。 同時に、それがあった Perlのと呼ばれるもの、 それ以来流行の外に行ってきました。 しかし、考え方は同じです。 そして、私は基本的に試すために座った ポートに、PHPにPerlのバージョンを行く しかし、完全な免責事項では、与えていない いずれかがまだ美学に思った。 だからここにウェブページがある。 これはファイルです。 私がズームインするとき、その明らかに 呼ばfroshim0.php それは私たちの最初だという理由だけで このシリーズの例。 そして、それが思われるものを持っていることに気付く 非常に醜いHTMLフォームであるためには、 しかし、形が面白い それができるため、 私は、ブラウザにユーザ入力を提供する。 今、私たちは形を持っていた最後の時間に 誰我々のクエリパラメータを提出しなかったが、 それが呼ばれたように、キューのパラメータ? 右、Googleにそう? 私たちは、完全にするという考えにパント その入力を使って何をやって。 しかし、今日、私たちは、出力の生産を開始。 そして、私は私の行動は見に行く ここで、最初は非常に簡単です。 ダビデは、私が性別をオフにチェックします ここ、ここマシューズと言う。 私はキャプテンではありません。 私は、[登録]をクリックするつもりです。 そしてURLが持っていることに気付く -0.phpを登録するように変更、 その後、ここで、この醜い文章があります。 私は何に思考を与えなかった こののフォーマット。 しかし、興味深いのは、その3です 値は明らかに渡されました。 これは、PHPの一種である printf--と同等 我々は、それが本当にと呼ばれるものがわかります ちょうどプリントアウトbit--中 何あなたがそれに渡された。 だから、これはそのフォームことを示唆している それには、少なくとも三つのフィールドを持っていた、 そしてあなたは私にそれらを入力しました。 一つは、私の名前だったものだった 性別、人は寮だった。 そして船長はさえに送信されませんでした 私はそれをチェックしなかったため、サーバー。 だから、これは、明らかに言うことである あなたがウェブ上で物事を提出する際に、 だけでなく、時にはURLを行います change--時にはそれはしていません。 実際には、ファイル名が変更され、 しかし、URLには存在しないものです 我々はGoogleとの最後の時間を見たこと。 うん? 学生:いいえクエリ文字列 デイビット·J·マラン:なしクエリ文字列がありません。 全く疑問符何かはありません。 全く疑問符qはありません 我々は前回行ったように、猫に等しい。 そして、いや、確かにありま​​す 疑問符名が等しい デビッドまたは寮はマシューズに等しく、 だからここですべてが起こっている? さて、私はここに戻ってgeditに行こう そしてそれらのファイルの最初を開く 私のバーチャルホストでは、ローカルホスト、公共 ここで、ディレクトリとfroshim0に入る。 だから、それはほとんどことが判明 このページのすべては単なるHTMLです。 そして、これは、あなたに不慣れかもしれません それはすぐにPSET 6となおさらそうなります とPSET 7とPSET 8。 しかし、これは単なるHTMLページです。 そして面白い こっちのようです。 その作用属性フォームタグ レジスタ0の値を有する。 なぜ私が提出するときです これは、そのファイルに移行する。 しかし、この方法は、ポストtoday--異なっている。 だから、少なくともありますが判明 使用されるWeb上の二つの方法 情報を送信する ブラウザからサーバーへ。 GETはURLにそれを置く。 ポストは他の場所でそれを置く。 そしていつ、なぜ、あなたかもしれない 実際にウェブサイトをしたい 代わりに、その後のポストを使用する のちょうど直感的に、取得? 任意のウェブサイト。 はどのようなデータだけ渡す必要があります ポストを経由して今推論によっては反対に 私たちが見てきた場合には、取得する 2つの違い? 学生:[聞こえない]で固定します。 デイビット·J·マラン:あなたがしたい場合 安全であることを何か。 だから、パスワードを入力可能性があります ウェブサイトは、クレジットカードに だろうウェブサイトへ これらの次善の種類 ブラウザがあることを置く場合 URLの内部値。 なぜ? あなたはしない、それを参照してください そのような大したように見える、 しかし、オッズは、あなたはかなり頻繁に歩いている 離れてお使いのコンピュータまたは使用のコンピュータから ラボ、およびので、誰か 誰かさえルームメイト 簡単に歩いて、見ることができました その個人情報。 あなたが電子メールを送信するとき ウェブ経由で、あなたはおそらく データが終了することをしたくない URL内のアップにも。 だから理由の任意の数があります なぜ我々はそれをここに置きたいかもしれません。 photos--右と、私はできないとしても、かなり あなたがグラフィックを取ると想像、 JPEGのような、およびURLに入れて。 あなたはそれを行うことができます。 そこを符号化する方法はだが、それはだ ちょうどそのように簡単ではない。 そこで0は、実際にはレジスタ 非常にがっかり。 それは文字通り言うすべてがこれです。 これは、いくつかの内部のプリントアウト HTMLは次のようにタグ付けします。 私はここでPHPのタグを持っている preタグ内にネスト。 「プリ」とは、単にプリフォーマットされたテキストを意味し、 モノ間隔、タイプライターのような。 Printrは、印刷再帰関数です。 その後これがあります ここで興味深いのは。 そして、我々はこれに戻ってくる 他の人がありますので、 しかし、ドル記号、アンダースコア 投稿はあるように思われる これは何でPHPの変数 あなたがブラウザからサーバに送信 あなたのために保存されます。 そして、私たちは時に取得する方法を見ていきます 長い前に、その情報。 しかし、最初に、のに戻ってみましょう わずかに異なる例。 register--に入るか むしろ、froshims1.php、 その少し違って見える。 私はもう少しかかった 書式付きの努力、 にもかかわらず、それはまだかなり醜いです。 しかし、私は先に行くつもりです そして今、「ダビデ」と入力します。 男性。 我々は、この時間を「キャプテン」をチェックします。 私たちは、マシューズをやる。 そして、登録してください。 そして、今回はそうではありません本当に、HM、と言います。 すべての権利なので、何のレジスタ1? 私はオープンレジスタ1 and-- HMへ行こう。 すべての権利なので、これは 面白いし、この 今に向けての足がかりである より興味深いプログラム。 このファイルが持つのトップに注目してください PHPのタグだけでなく、いくつかのコメント。 これらは、今のところ、気晴らしです そうちょうどそれらのコメントを取り除くましょう 彼らはC.にいると私は主張と同じように コメントとコードのこのチャンクを持つ このコードはあること 提出を検証。 まあ、それはことが判明 ドル記号のような変数 あるポストを強調する スーパーグローバルを呼んだ。 彼らは、これらのようにしている 特別なグローバル変数 ちょうどオムニ現在していること あなたのプログラム内で使用できる。 そして、あなたは角括弧表記を使用することができます インデックスにそれらに番号を使用していない 0、1、2、3、実際の言葉を挙げることができる。 だから、ドル記号と考えることができます ハッシュテーブルの一種としてポストを強調する あなたは、ルックアップにキーを渡すことができること ワードでの間の角括弧、 それは戻ってあなたを与えるために起こっている ユーザが実際に提供される値。 PHPは機能を有する。 ちょうどその空と呼ばれる これは、yesまたはno語る 変数が空であるか。 我々は、これらの二重線を持っている、 それだけC.のように、手段あるいは だから実際には、この4行目はただである ユーザーが名前を与えていない場合は、言って や性別を与えていないか、しませんでしたでした 寮を与え、先に行くと、彼をリダイレクト または彼女のここでこのラインを介して。 だから、これは、ちょっと不可解である これは文字通り意味 この場所に戻って、 ので、ユーザはパント バック彼または彼女はどこから来たの。 しかし、それはちょっと無粋だ その中で私は一生懸命それをコード化された。 しかし、どのような条件であれば、この場合 trueと評価されないのですか? ユーザーは私に何を与えなかった場合、彼 または彼女の名前と寮と性別? その条件がない場合は、 trueに評価しようとして、 私は7行目で出口をヒットしない。 だから何が起こるか? そして、これは何です PHPに関する興味深い。 あなたは、内外にドロップすることができます PHPモードの、いわば。 あなたには、いくつかのコードを実行したい場合は、 あなたは、PHPタグを開いて閉じることができます 私がここでやったように、そこにコードを置く。 とすぐに閉じるように PHPタグ、サーバ ただ吐き出すしようとしている 何でもあなたがそこに置く。 そして実際に、これはの一部であった PHPのオリジナルデザイン、 悪化のためのより良いため、これがあった コー​​ドとマークアップの混入 言語。 そして、我々はこの非常にいることがわかります すばやく混乱に委譲さ。 そして私たちはより良いやる この最終的に、ちょうど 私は容易さに気付く いくつかのロジックを実行することが実際にできること。 しかし、まだ少しがっかり。 バージョンを開くましょう 1年生IMS、の2つが どうやらregister2.phpに提出する。 したがって、このファイルは実際に起こっている ほぼ同じように見えます。 私は1年生のIM 2に行くつもりです。 しかし、1年生IMSにおける2、 それでは何が起こるか見てみましょう。 デビッド、として、ラジオボタンをクリックします それは呼ばれています。マシューズ、ノー船長。 登録します。 あなたが登録されています。 いまいち。 ああ待って、私たちはやった その例として、私たちはしませんでした? すべての権利、待機。 私たちは3をやる。 明らかに何かがについてです Gmailので発生する。 私たちはそこに着くでしょう。 だから、1年生のIM 3は次のようになります。 何ら変わりません。 しかし、私が行うときデビッド、男性、マシューズ、および 、この3番目と最後のバージョンを登録 クレーム、非常に単純に、あなたに 本当に登録されています。 つまり、ソートの軽微だ。 しかし、私はこれで主張 3番目と最後のバージョン 私は今まさに私を再現しています ルームメイトと私は1年生IMS用に構築 プログラム年前。 そして、それは簡単だった。 ないデータベースは、ありませんでした Excelスプレッドシートをなし。 しかし、もっと重要なのは、 これ以上の用紙がありませんでした 私たちはこのプログラムで何をしたか理由 誰が、実際に試験監督を電子メールで送信することでした 以前に受け取っていた フォームを経由してこれらの事。 どうやら私たちは、これをプログラムしました 誰かが登録されるように、 ジョン·ハーバードのアカウントの電子メール このケースでproctor--または彼自身、 とジョンHarvard--以下 「この人は単に登録されています。」text-- 名前はキャプテンが空白である、デビッドです。 性別、男性。そして寮、マシューズ。 だから何が起こったのか? ここで問題になっているだけでなく、ファイル どうやらregister3.phpです。 私がこれを開くなら、あなたが表示されます このようなコードの電力の両方 また、率直に言って、不安 電子メールのようなシステムの。 私はちょうど効果的にふりました ジョン·ハーバードは、以下のようになる。 私は、最大トップオープンphpのタグを持っている ちょうどここに言ういくつかのPHPコードを付属しています。 ダウンここで、そこに判明 PHPのライブラリがある。 あなただけす​​る必要はありません できるだけ多くのヘッダファイルが含まれています。 あなたは多くを得る 台所のシンク、いわば。 しかし、4行目で、今回、私がやる と呼ばれる特別なライブラリにしたい 何かあなたですPHPのメーラー、 多くのシステムでは、無料でインストールできます。 ダウンここに私が検証してい 提出だけ チェックすることにより、ユーザーは与えなかった 私の名前、性別、寮。 そうだとすれば、先に行くと、 メーラーをインスタンス化します。 あなたがいると考えることができ ちょうど割り当て、コード行。 それはmallocのようなものだが、 それは少しセクシーだ その中であなただけではない言及 mallocといくつかの一般的な数。 あなたは、私にはこれらのいずれかを与えると言う 私にこれらの新しいものを与える。 そしてあなたがプログラムされてしまった場合 JavaやC ++またはその他の言語、 あなたはこれを見ているかもしれません。 しかし、それの短い、もし なじみのない、この行 ドル記号メールに入れます と呼ばれる特殊な構造体 ビルトインれたオブジェクト 電子メール機能。 そして実際に、気づくと同様の構文。 このポインタは、それ自体ではない。 PHPは、ちょうど同じ構文を使用しています。 この行は、使用することを言っている SMTP--簡易メール転送 ちょうどあるプロトコル、 プロトコルは、電子メールを送信するために使用される。 これは、使用を指定している ハーバードのSMTPサーバ、どの キャンパス内にどこかにここにある。 これは何を言っているか、TCP と話をするポート番号、 そして私はちょうどによってそれを考え出した グーグルやヘルプデスクに問い合わせること。 その後ハーバード大学は、いくつかを使用しているため、 メールserver--上のシステムセキュリティ 少なくとも暗号化する あなたとそれとの間のトラフィック、 誰もがit--に送信できるにもかかわらず 私は、TLSプロトコルをオンにするつもりです このセキュアに保つため。 しかし、これはどこのものです 少し怖い取得。 私はちょうど任意にできます 、私はjharvardだと言う そして私はちょうど任意にできます ここで自分自身を電子メールで送信。 そして私は指定することができます ここでこのラインを有する被験者。 そして、これはただ醜いが、それはだ 連結のちょうど束。 PHPは超便利シンボルを持ってい判明、 一部の言語のような、ドット演算子、 これだけで、文字通り連結 文字列の文字列の後の文字列の後に、 あなたがmalloc関数や図形に持っていない 文字列の長さの合計外。 あなたはただそれを行う。 そして実際、私が連結していますので、 これらのドットとこれらの事のすべてにおいて、 それはなぜ電子メールの私です 送信されたそれがなかったように見えた。 その後最後にここで、私がメールを送信するよ。 だから、これがfalseの場合、 私はちょうど、死ぬつもりだ これは、関数であるだけでプリント 画面にいくつかのエラーメッセージ。 しかし、実際には、ある 送信機能を呼び出す。 そうでない場合は、このすべてが失敗した場合、 それは私をここに戻ってリダイレクトします。 そして、なぜ私がいることがわかりました 私は実際に登録されている? まあ、それはここに起こった。 だから私はこれを持ち出す 理由のカップル。 一つは、これはあなたがどの​​ように構築する場合には、正確である 最終的なプロジェクトのためのいくつかのウェブサイト または実世界のために、これは あなたは、電子メール通知を送信する方法 あなたの顧客やあなたの加入者に。 これは、パスワードリマインダを送信する方法です。 これはあなたが人々のメッセージを送信する方法です 彼らはFacebookの新しいを持っていること 保留中のメッセージまたはそのような何か。 しかし、それはまたに話す これができると事実 から非常によくなっている デーヴィンまたは他の誰。 そして、私はこの種の言う 笑顔で私はだから を通じて何が起こっているのか全くわから この時点で、あなたの心のいくつか。 しかし、これは、私のようなものかのいずれかです 私は物事の種類をしないように、と言う、 それは些細なことであるために このような電子メールを偽造する。 しかし、あなたが見てきた可能性がある または、クリムゾンで読み取る の後期それもきれいだ 人々のための些細な いくつかの原点に戻って、それらをトレースします。 そして、おそらく、私にいくつかの時間を尋ねる CS50昼食時、どのように私最初 非常に密接に知り合いになった ほとんどEDボード長年へ 前、私は発見したとき どのようにインターネットは働いた。 だから、どんなcase--わずかに EDボードがした後。 そこでどのような場合でも、存在する スーパーグローバルの全体の束、 それらはここに呼ばしているように、一 我々はドル記号、アンダースコアポストをsaw--。 GETと呼ばれるカウンターパートがあります、 これは、URLからどこのものです 行くしまう。 他人の全体の束があります、 too--セッションとサーバとクッキー。 我々は戻って来る 他のいくつかの時間をクッキー、 しかし、セッションはクールの一種である 右now--までnow--理由 我々は、Webブラウザでやったすべてのもの ソートのステートレスである、いわば。 私の周りをクリックすることができ、アクセス サーバー上のファイル、何か 画面上で行われますが、 接続は閉じられます。 Internet Explorerまたは Firefoxのアイコンが回転を停止します そしてあなただけの何を参照 そのWebページが含まれています。 だから、HTTPはステートレスであるという点で、 それは接続を行い、一度、 いくつかのデータを取得し、それはそれだ。 これ以上の接続、スカイプとは異なり、 FaceTimeのとは異なり、GChatとは異なり、どの 定数を維持 サーバーへの接続。 ウェブは基本的にあり しかし私たちはよ切断 長いどのようにする前に参照してください。 我々は物事をシミュレートすることができます FacebookのチャットやGChatのような、 illusion--を維持した または実際に維持やる 使用して常時接続 より近代的な技術。 しかし、私はに行けば、言う、counter.php、 これは別の簡単な例です、 当社は現在考えている、わかりますように 私は、サイトゼロ時間を訪問した。 しかし、私は単純にページをリロードすると、 それがどういうわけか私は前にここにいた知っている。 私は再びリロード場合は、それを 私は前にここにいた知っている。 そして何度も何度と何度も何度も。 だから、いくつかのプラスplussingがあります 起こって、しかし予告 小さなものはそう今までスピン 簡単にトップアップした後、切断し、 そうそれは私が一定していないようです 私のアプライアンスへの接続。 まあ、私はcounter.phpに行けば、 それがどのようにシンプルに気づく。 私が最初にこの特別なを呼び出す 我々はすぐによ機能 当たり前の服用を開始 セッション開始と呼ばれる。 セッションを開始します。 セッションが今後ちょうどです ショッピングのように、バケツになるだろう あなたが値を置くことができるカート プログラマとしての信頼の種類 彼らは時にここにあることを行っていること そのユーザーはback--第二が来る 後で、時間後、でも一年後、 彼または彼女がクリアされない限り、 彼らのクッキー、我々は最終的に表示されますように。 そして今、私はちょうど持っている ここでの条件の場合。 その場合、次のキー、 カウンターと呼ばれる、内部に設定されている このスーパーのこのハッシュをglobal-- あなたがwill--た場合の表は、セッションと呼ばれる、 その後、先に行くとつかむ session--シンクタンクからの値 ショッピングとしてこのの cart--とそれを格納 カウンターと呼ばれる一時的な変数に。 そうでなければその値カウンタがあった場合には いわゆるショッピングカートに設定されていない、 ちょうどそれを0に初期化します。 最後に、ダウンここで、行くと戻す ショッピングカートまたはセッションへ カウンタ1の値。 だから、このことが判明 特別なコンテナhere-- これは、もう一度、これらに関連するの一つです アレイは、アレイはあなたができるインデックス 単語に代わりnumbers-- ユーザーが消えた後にも持続する。 繰り返しますが、私はすぐに戻ってページに行くよ。 それは分かそこらをされています。 しかし、それは私がしたことを覚えている 19回の前にここにい。 これは私の第20回の訪問である。 そして、これがカギになるだろう 覚えている任意のWebサイトを実装する あなたは、あなたが置くことを、ログインしていること あなたのショッピングカート内のリテラル何か 購入したり、あなたには、いくつかを持っているために 保留中のメッセージの数。 いつでもあなたがしたい 情報を覚えて、 我々は次のように、そのPHPを表示されます いくつかの他の言語、 状態のこの錯覚を提供してくれます たとえ、あなたがPSET 6で表示されますように、 あなたがHTTPリクエストを作っているように クライアントからサーバに、それはそれだ。 あなたがいることを取り戻すたら 応答は、より多くのものはありません デフォルトでは、サーバから戻ってくる。 しかし、我々はそれを回避する方法を説明します。 さてさて、してみましょう 少しこれをクリーンアップします。 私たちは、いくつかを見てきました そこに異なる例。 ああ、脇、などのために おなじみのか慣れていない人、 理由は 1年生のIMS例行きました 本当に見てから よくslightly--する醜い、 まだ少しにugly-- まだ醜いの少ないものも醜い 私たちが見れば理由です ここでは、ソースコードで、 それは私がこれを持っていることが判明 ファイルの最上部。 ブートストラップは、多くの一つであることが判明 そこに自由に利用できるライブラリ プログラミング言語のためではないが存在すること 常に、しかし、CSSまたはJavaScriptのための またはHTMLまたは任意の数の言語。 そしてこれらの人々here-- もともと出てきた Twitter--のちょうど持っている スタイルの全体の束。 それは巨大なファイルだ ここに誰かが書いたことを、 または誰かのは、時間の経過とともに、書いた 色と書式を指定します やその他もろもろ、私ができるように、 種類のその構文を借りる と把握する必要がありません 私のフォームのレイアウト方法。 これはまた、縮小されている コンピュータができるように、 それを理解していないが、 必ずしも人間。 だから、なぜだけだ そこにスタイル設定が変更されました。 しかし、それでは、より良いやらせる 設計の観点から、 私たちはダウンとどまれば理由 この道が長すぎる、 私たちのコードがために起こっている 汚いとメシエ得る。 それでは、ここでこれらの例に焦点を当ててみましょう。 今日の最後。 だからここに超簡単です CS50のウェブサイトのバージョン1.0。 それだけへのリンクがあります 講義やシラバス、 そしてそれは、その順序なしリストを使用しています 我々は前回使用したULタグをtag--。 そして実際に、もし場合は、I ページのソースを表示を開く、 あなたは、これがあることがわかります 本当に、本当に簡単なHTML。 実際に、これはにもかかわらず フードの下にPHPファイル、 それはまだだけ吐きだ 今のところ出HTMLのみ。 だから私は講義をクリックすると、 私たちはこれが起こるを参照してください。 そして、私は週をクリックすると ゼロ、我々はこれを参照してください。 そして、私は上をクリックした場合 水曜日、私たちはこれを参照してください。 そして、これは明らかに、PDFた その日からスライドの。 私がやったすべてが持つリンクです ここにこのURLへのアンカータグ。 だから、これはこれはかなりあると言うことだけである CS50のウェブサイトの簡易版。 のは、それが実装されている方法を見てみましょう。 私はmvc0ディレクトリに行けば、 我々はいくつかのファイルが表示されます。 一つは、READMEで、もしそうなら このうちのいくつかは、速すぎる あなただけの周り突くことができます よりゆったりと後で。 そして、ここでの通知がindex.phpファイルです。 それが判明した場合、その あなた自身、人間、 最終名前を指定しない URL、通常のWebサーバ あなたのためにいくつかのデフォルトの名前を推測する。 インデックスドット何か 一般的にはデフォルトです。 だから、なぜ一瞬前だ 私はここでこのURLを訪問した際、 ファイル名なし、ファイル 拡張子、URL内のピリオドなし。 それはちょうど魔法のように何らかの形で知っていた index.phpを探すために。 それはちょうど慣習だ。 何でも呼び出すことができた。 だから私は今に行けば index.phpの、あなたが表示されます その、indeed--レッツ コメントを取り除く ここでは本当にありますので、 it--面白い何もない これは単なるハードコーディングされたHTMLです。 だから、一貫性のある 私の主張といえ、 あなたがHTMLとPHPを混ざり合っできるように。 実際はありません ここでのプログラミングロジック。 その他のファイルはかなりある ずっと同じように面白くない。 それはちょうど、ハードコードされた週の一つだ ここで週に1メートルと週1ワット、 月曜日と水曜日のため。 その後、私は週にゼロを開く場合には、 それはほとんど同じだ気づく。 そして、それは、キーテイクアウェイのようなものだ。 これがどれだけ冗長に注目してください。 これらのファイルは、かろうじて変更し、まだ私 これらのコピー/ペースト仕事の一つを引っ張っ 私はおそらく1 file--を取った場合、 週にそれをコピーしたzero-- 週1は約来たときに、 そしていくつかの値を微調整。 我々は、おそらくことができる必要があります これよりも良いことができません。 それでは、MVCまで戻りましょう バージョン1に入る。 そして、私が持って気づく いくつかのファイル、どのような理由 これらのファイルのすべてに共通していただけ 私はバージョン0に戻った場合にモーメントがago-- それではインデックスに戻りましょう、 ちょうどpostulate-- 私はcomments--取り除くたら このページのどの部分 私のファイルの一人一人に考えられる? ちょうどそれを呼び出す。 どの行が複​​製されます おそらくこれらのページのすべてにわたって? うん? 学生:[聞こえない]。 デイビット·J·マラン:1〜9。 ええ、絶対に。 多分8を除いて1〜9、 CS50ので少し変更する 講義になるか 週ゼロか何か。 しかし、ほとんど同じ。 だから、すべてのこのようなものはただである 種類のコピー&ペースト。 そしてカップルがあります 他の行は、私が考えることができます そのことを、おそらく同一であり、 すべてのファイル間。 STUDENT:12および13。 デイビット·J·マラン:うん。 確かに、12、13、14、おそらく ただ面白い理由 線11で何が起こっている および10、ので思われる。 それでは、バージョン1を見てみましょう これは、この上の改善を試みます。 このMVC example--のバージョン1において、我々はよ moment--でMVC何手段を説明 私はインデックスに行けば、それは一種の 今少し混乱に見えます。 それは以前とそれほど単純ではない。 しかし、あなたがし始めたら それはだ、慎重にそれを読んで それはやっているのか非常に簡単。 どうやらライン1と 8行目は、交換した あなただけのidentified--もののすべて ちょうど良い対策のためにも、 私は念のため、いくつかにそこを去っULに関して 日は、物事のリストを持っていませんでした。 だから必要とする種類のポンドのようなものです C.それはコピーとペーストに含まれる 効果的に内容 右こここのファイルに。 だからheader.phpの中で、あなたのように その名前から推測するかもしれないが、 ページのヘッダーになるだろう。 それは一種の、ここで、孤立だ。 それだけにトップを持っていますが、 以下にこれ以上の内容はありません。 そして、私はその間フッタを見れば、 これは、他のファイルだったmentioned-- この1は、さらに少ない面白い しかし、再び、それはすべてに共通です。 だから、これはフッターです。 これがヘッダである。 これはだファイルです 変化するので、なぜしない 共通性を考慮しよう ここに次の2行を持つ? しかし、我々はこれをきれいにすることができる さらに少しアップ。 私が先に行くつもりだと バージョン2を開く 我々はそこだということがわかります 新しいファイル、helpers.php。 私たちは、それが一瞬に何があるかわかります。 それではとして、インデックスに行こう 以前とエントリポイント。 そして今、私が必要としてる気づく helpers.php、ヘッダーやフッターはない。 しかし、ヘルパーは一種のようなものです PSET 2からhelpers.cとhelpers.h またはずっと前に実際にあなたPSET 3 そのPSETを検索し、見つけた、 そしてあなたは、ソートのためにあなたのコードのすべてを持っていた そして別のファイルに検索。 つまり、ここで何が起こっているかだ。 そして今、3行目は少し違って見える。 そして、それはちょうど1行です。 これをさらにようにするには 明確な、私はちょうどでし 文体一貫してこれを行う 他のすべてで、私たちはやった。 しかし、それは本当にありません 機能を変更する。 それは本当のたった1行のコードです。 どうやら、関数があります どこかでヘッダーのレンダリングと呼ばれる、 これはどこのものです かなり強力な取得。 その括弧の内側に注意してください 構文のどの他の作品はありますか? それは言うことはおそらく少し難しいですが、 私はいくつかの白を出してあげるthere's--気づく スペース。 角括弧があります。 我々は少し前に見て、角括弧 連想配列の文脈において、 そのハッシュテーブルのように、再び、である。 そして、あなたはCまで、今思えば、 関数に引数の順序 常に同じでなければならない。 あなたは何を覚えておく必要 X、Y、Zまたはz is--順序、yは、x-- そしてあなたは常にそれらを提供する必要が 同じ順序で、またはそれらを見上げる あなたが忘れてしまった場合。 しかし、これは賢いやり方であると思われる 任意のキー値を渡す タイトルは名前ができるペア この場合の引数の 及びCS50は、その値である。 私が持っていることと事実 これらの角括弧 ここに私ができることを意味します また、何かを渡す 週のような1または0,2または3である。 だから我々は、パラメータ化しました そのような方法でこの機能 それは複数の入力を取ることができること、 しかし今のところはただ一つだ。 私は今helpers.phpに行く場合は、 それはやっているのかに気づく。 これは少しある 新しい機能の、 しかし、今のところちょうど取る これがあることを信仰上の とあなたの構文 PHPの関数を定義する。 あなたは文字通りの機能を言う。 あなたがリターンを指定しない と入力し、それが一貫性のある 変数ディテール以前と どこにあなたは本当に強く入力しないでください。 これは単に指定 その、デフォルトでは、この 連想を取る 引数として配列。 そして、あなたは何を知っていますか? ユーザは、1つに合格しなかった場合 で、デフォルト値をとる。 これは、Cにはない特徴である なぜなら、今、いいです、私たちのために データ、も、あなたなら それに何かを与えていない、 になるだろう 配列が、空1。 そして余談ですが、エキスなど ちょうどファンキー何かを それはこのからすべてのキーを取る場所 連想配列、物事のすべて あなたは、角カッコで囲んで置くことができ、 それらの外の変数を作成し、 我々は最終的にアクセスすることができるように footet.phpとheader.phpの中で彼らに。 それは少し抽象的ですが、 ので、私はこれを指摘してみましょう。 index.phpの中で、私はあることに気づく タイトルのキーと値のペアを渡す CS50の値を持つ。 私は今helpers.phpを見れば、 そのRenderHeaderに気付く 私が渡しているというデータを抽出される で、その後、header.phpのを必要とする。 ワット·アイヴ·ダンは、貧乏人の一種である ここで、次の実装。 私はheader.phpのを開く場合は、 私は一生懸命もはやきないことに注意してください このヘッダファイルに単語CS50をコード化された。 私はatrociously確かにこれを入れてきた という名前の関数、HTMLの特殊文字、 そこに。 しかし、私は何をやったかに気づく。 私は開いているHTMLを持っている。 私はその後、オープンヘッドとオープンのタイトルを持っている。 その後、内部のタイトルのオープンと 終了タグは、私はPHPのコードのビットを持っている。 そして、これはいいが、構文のものであり、 そのちょうどエコーを意味します。 これは文字通りthis--意味 following--エコー これは書くことがセクシーです。 タイトルをエコー そのが渡されています。 しかし、あなたはどう思いますか、HTML 特殊なチャーは、すべてに約ある あなたが持っている場合は特に いくつかの従来のHTMLの経験? 何文字かもしれません ページに渡すのは危険 あなたが動的に生成している場所 このようなコードを含むWebページ? 私はこのファイルに行こう、バージョン 2、私はこれを誘導することができないかどうかを確認します。 バージョン2本である。 そしてすべてのものに気付く うまく機能して、結構です。 しかし、私はindex.phpを入ると仮定し、 私は私のページのタイトルと規定 CS50ではありません。 それは、オープンブラケットスクリプトアラートです Hello Worldの、近くに単一引用符、 閉じ括弧、セミコロン、 開き括弧、スラッシュスクリプト。 スクリプト、として、我々はよ 最終的にはタグがあり、参照してください。 あなたが別の使用に使用することができます プログラミング言語と呼ばれる Webページの内部にはJavaScript。 そして今ここにロジックに気づく。 ここでは、タイトルと呼ばれるキーです。 ここではそれが今long値クレイジーだです。 しかし、私はヘルパーに行けばPAGE- というか、ヘッダページ、 私はこの関数を呼んでいる まずそのタイトルに。 だから私は今、このページをリロードした場合、私は ばかげて見えるもの、これを参照してください、 それは安全です。 それはちょうど愚かに見えます。 しかし、その代わりとします 私はこれを忘れていた。 そして、私の言葉をマークし、ゼロ以外の数 あなたがこれを行うには忘れてしまうの そしてあなたは、いくつかの勤勉を得るでしょう 学生や友人が来る あなたにCS50フェアで、または匿名で 夜にあなたのウェブサイトにチャンスをうかがっ と本質的にコードを注入する あなたのサイトにあなたに知られず 何とか。 私は単純に唾した場合ので、 ここにタイトルとタイトル出 there--よく、タイトルであれば、文字通り このとPHPのように見える 唾を吐くことができます言語として 他の言語のテキストをアウト、 これは文字通り起こっている このタグを交換するには、 もちろん、私は他の場所で何を置く。 だから私は今ここに行くと後にリロードする場合は、 これらの安全機構を元に戻す、 今私はここでのHello Worldを持っている。 今では、すべてのその大きなではありません 扱うが、あなたは何かができる もう少し悪意のある ここでは、ありますように 我々は過ごしたらわかりますように、他のtags-- 場所のようなJavaScript--でより多くの時間 ドットhrefが引用、引用終わり、HTTP、取得します business.comが、その反対の 先日から。 そして今、あなたはウェブを誘導することができる 実際にすぐにどこへ行くページ ここではこのWebページへ。 そして実際に、私はしたくない でもbusiness.comに移動します 私はしたくないので、 それが何であるかを知っている。 しかし、これは、あまりにも、コードをトリガする このページに注入される。 だから、これはたとえと言うことだけである 我々はいくつかの上で、スーパー早期に導入している これらのより複雑な構造の、 それは確かに作るの端部に向かってすべてです あなたのコードが悪用されない。 だから今ここで3番目のバージョン。 それは少し手の込んだなってきた。 私は本当にしませんでしたlike-- 私の肛門側 少しずつイライラなっていた 私は関数が呼び出されたという事実 RenderHeaderとRenderFooter それは、ほぼ同じであった。 だから、それは私に起こった、なぜない 私は、これらの機能をパラメータ化 レンダリングと呼ばれるだけの一つに、 それは第二引数を取る持っている テンプレートの名前のように、最終的な ヘッダーやフッターのどちらかをrender--するには? その後、必要に応じて、私がしたい場合 いくつかのキーと値のペアで渡す 私はタイトルのために行うように フッターのヘッダーではなく、 私はそれを行うことができます。 だから今、私はhelpers.phpに行けば、 それは少し複雑だ。 そして、私はで私の手を振るよ 詳細は、それだけで一つの機能だ。 だから、より良い設計に向けた一歩だ。 我々はさらに、この一歩を取ることができます。 私は私の第四に入る場合 このバージョンは、今気付く 私は何かをやっていること 不可解なのがさらに一種。 そして私は、これは知っている 一度に吸収することがたくさん、 しかし、我々はただ親切だ 物事をクリーンアップする。 今、私は私のヘルパーを入れている と呼ばれるフォルダにファイルを ちょうど任意includes-- 私はものを置きたい場所の名前 私はその後、include--としたいこと この残りの部分は同じである。 しかし、私はgeditの中で、今見れば、 私は取り除く得ている予告 てきたそれらの他のすべてのファイルのとI 例えば、ここに、それらを移動しました。 その後テンプレートで、 私も、ここにこれを持っている。 そしてこれはステップに向かって今、すべてである はるかに優れたデザインパターンを使用する。 そして、我々は非常に迅速にしている 離れて移動するつもり PHPのデフォルト機能から、 その私たちがここに始まり、 あなただけのPHPを混じり合う場所、 そしてあなたのHTML、およびあなたのCSS、 そしてあなたはそれを吐き出す あなたがあなたの方法について行く。 それは非常に保守性であることを行っていない。 ちょうどC言語のように、私たちは使用して開始 複数のファイルや複数の機能 アウトファクタリングの事。 私たちはここで同じことをやる。 そして実際には、第5及び最終の中 バージョンここで、私は1つの他の事をしました。 あなたも、ドットドットを使用することができ、 再び、ちょうど親ディレクトリです。 さらにセキュリティを意識する、 私はリスニングを見れば理由 ここで5番目と最終版のため、予告 私はここで1つ上のディレクトリと呼ばれていること 公共、その後に 同じレベル、いわば、 私は含まれており、テンプレート持っている して、そのテキストフ​​ァイルのreadme。 そして、私は構造化されてきた理由 それthis--と非常に多くのウェブのような ホスト、特に5ドルA 月のもの、または10ドル、月のもの、 あなたは今までにこれらのいずれかを持っていた場合は、 それらの多くは何をすべきかservices-- 彼らはちょうどあなたがすべてダンプすると期待されている 1つのディレクトリにファイルの、 我々はすでにで行ったように この非常に最初の例。 しかし、すぐにあなたがより多くの構築を開始すると ただ保管し、洗練されたサイト あなたを気にし、ファイルデータ 実際に物事を整理、気 正しく、よりセキュリティを備えた 念頭に置いて意識することができ 私たちは守るために開始 友人のすべてに対して、 あなたはどちらか、あるいは持っていること このクラスの外で誰が、 とすぐに作り始めるように ウェブ上のプログラムを自分で、 ピッキングを開始しようとしている あなたにそれらに。 そして私たちは見てみましょう 最終的にこのデザインで。 これは単なる写真です それは、以下のものが示している。 私たちは、私たちのすべてを置くつもりだ 一つ以上のファイルにプログラミングロジック、 そして私達はちょうど開始するつもりだ これらのコントローラを呼び出す。 どこで脳のそれはだ 当社のウェブサイトは実際にある。 その後、我々はするつもりだ ビュー、およびビューを持つ ただ個別のと同じくらい簡単です しばしば、と呼ばれるテンプレートをfiles--。 彼らはただ持っている 私のページの美学、 私はページが見てみたい 色やレイアウトlike-- との位置 すべての変数。 その後、もっと面白い 我々は最終的に買ってあげること ただあることを行っているモデルは、ある 我々は他の技術に平手打ち単語 我々は持ち込むこと 絵、実際のデータベースのように、 お好きな時にするように 情報を保存し、 あなただけの電子メールを送信しないでください あなたの試験監督へ、または自分自身に、 あなたが実際にデータベースに格納します SQLとして知られている別の言語を使用して。 そして私たちが今日ここに残しておきますと、 水曜日にこれを拾う その後、データベースを紹介します。 [音楽再生]