[Powered by Google Translate] [セクション8 - より快適] [ロブボーデン - ハーバード大学] [これはCS50です。 - CS50.TV] これらの週のセクションノートは、かなり短くなるだろうしている ので、私は話を続けるつもりだ、あなたたちは質問を続けるとしている、 そして我々は、できるだけ多くの時間を埋めるためにしようとするでしょう。 多くの人がこのpsetには必ずしも困難ではないと思われるが、それは非常に長いです。 psetのスペック自体は時間が読み取りに時間がかかります。 我々はあなたがおそらく使用する必要が生じることもあり、SQLの多くを与える。 我々はそれの多くを追っているので、それほど悪くはないはずです。 誰もが開始または終了した? それは最後のpsetだ。ああ、私の神。 通常、この後にJavaScriptの1つではなく、カレンダーの変更のものがあり すべてが1週間短くなり、私たちはもはや、JavaScriptのpsetを持っていません。 私は、JavaScriptが出題しようとしているかどうかをどのように影響するかわかりません または1をクイズ。 私は、あなたがJavaScriptに関するハイレベルのことを知る必要がありますようにそれが何であろうと想像 しかし、私は、我々はちょうどあなたにまっすぐにJavaScriptコードを与えると思います疑う あなたはそれでpsetを持っていなかったので。 しかし、それは来週のクイズのレビューのためのものでしょう。 質問のセクション。 このようなものの多くは、やや貧弱な表現ですが、私たちは、なぜ議論します。 Cとは異なり、PHPは "動的型付け"言語です。これはどういう意味でしょう? さて、あなたが使用する必要があるchar型、float型、int、および他のすべてのキーワードに別れを告げる C言語の変数や関数を宣言するとき PHPでは、変数の型は、それが現在保持している値によって決定されます。 我々はdynamic.phpというファイルにこのコードを入力し、そうする前に PHPは動的に型付けされています。それは本当です。 私は、我々はint型、char型、float型に別れを言っていることを意味しているという事実に同意しない その他のキーワード。 動的型付けと代替の厳密な違い、 静的に型付けされている、つまり動的型付け、型チェックやもののすべて それはコンパイル時に行われる静的に型付けされたのに対し、実行時に発生します。 一般的に静的な言葉は、コンパイル時のものを意味するように思えます。 、私はそれのための他の用途があると思いますが、C言語では、静的変数を宣言するとき その記憶は、コンパイル時に割り当てられます。 ここでは、動的型付けというだけのことを意味します - C言語では、あなたがそれをコンパイルするときに、文字列と整数を追加しようとすると、 それはそれはあなたがintとポインタを追加することはできませんと言うことが起こっているので、文句を言うだろう。 それだけで有効な操作ではありません。 それは我々が第二のに買ってあげることを別のものです。 しかし、検査のその種、それはコンパイル時に文句を言うという事実は、 静的な型チェックです。 あなたはchar型、float型、int、およびそれらの事のすべてを言う必要はない言語がありますが、 しかし、言語は、それがすることになっているどのような種類のものの文脈から判断することができ それはまだ静的に型付けされたのです。 あなたは51、OCamlを取るのであれば、あなたは、これらのタイプのいずれかを使用する必要はありません それはまだ、コンパイル時にint型と文字列とを混合しているので、あなたはこれを行うことはできませんと言うだろう。 動的型付けはちょうどいつか実行時間の間にあなたが苦情を得ようとしていることを意味します。 あなたはまた、一般的には、前にJavaを使用した場合、ほぼすべてのC型言語 静的に、C、C + +やJava、それらのすべてが、一般的に静的に型付けされ、入力することになるだろう。 Javaで何かをコンパイルし、あなたが言っているときに 文字列sは、文字列ではない何か新しいものに等しい それはこれらのタイプがちょうど一致しないため文句を言うだろう。 これはコンパイル時に文句を言うだろう。 しかし、それはまた、あなたが何かをキャストしようとした場合の事が好きで、いくつかの動的な時間を持っている 現在の型よりも具体的な型に、 それはそのキャストが成功するために起こっているかどうかを確認するために、コンパイル時にできることは何もありません。 Javaもあることを確認するいくつかの動的な型を持っている、それはそのコード行に到達するとすぐに それが実際に実行しているときは、キャストを行うために起こっている そのキャストは、最初の場所で有効であったかどうかを確認してください それがなかった場合、それはあなたが無効な型を持っていることを訴えるために起こっている。 動的な型チェック。 dynamic.phpと呼ばれるファイルにこれを入力します。 Dynamic.php。 私はその書式を解凍します。 我々は、我々は、整数7に変数が設定されている その後、我々はそれと%sを印刷しようとしている - ああ、我々はそれの種類を印刷しているので、GetTypeメソッドは、変数の型を返すために起こっている。 我々だけで何度も繰り返しタイプを印刷している。 私達はちょうどphp.dynamic.php。 我々が通過するように我々は整数からブール、文字列にそれはそれは変化がわかります。 C言語ではなくブール値のデータ型が存在しない、全く文字列データ型はありません。 char *とブールはちょうどintやcharか何かになる傾向があります。 PHPでは、これらのタイプが存在しますが、それはC上のPHPの大きな利点の一つだ - 文字列操作は、彼らはただ働く℃よりPHPで無限に容易であること。 だから我々はここに戻ってくる。 我々はdynamic.php走った。 これはdynamic.phpでPHPコードを実行するために、PHPと呼ばれる、PHPインタプリタに指示します。 あなたがファイルのエラーがある場合は、通訳を教えてくれます! インタプリタは、これはPHPとCの間のもう一つの大きな違いです C言語で何かをコンパイルし、そのコンパイルされたファイルを実行する必要があります。 PHPでは、あなたは何をコンパイルすることはありません。 だから、PHPインタプリタは、基本的にはラインで、このラインを読んでいる。 これは、varは= 7、それはそれはprintf関数のようにヒットその後varのヒットのprintf次にヒット打つ。 そこにそれがないコンパイルのビットです、そして、それは結果をキャッシュ スクリプトを実行する場合は、後述のあなたには、いくつかを行うことができますが、 が、基本的には事のライン替えラインです。 我々はC言語で取得する最適化に多くのことを意味し、 コンパイルのように、それは単に一般的にコンパイラはあなたのためのトリックの多くを行うことができますている。 それが使用されていない変数を取り出すことができ、それは物事のこれらの種類のすべてを行うことができ、 それは末尾再帰を行うことができます。 PHPにおいては、その優位性を取得するつもりはない それはただの線で一行ずつの実行を開始するために起こっているので、 そしてそれは本当に同じように簡単にこれらの事を認識しません それは1つの大きいコンパイル事オーバーパスしてから実行ではないので; それはラインだけでラインです。 だからそれはインタプリタです。 私たちの動的型付けに戻る:かなりクールな、え? あなたは間違いなくC言語でそれを行うことができませんでした! あなたは以下の値のそれぞれのタイプを把握することができますさて、を参照してください。 参考のためにこれを参照してください。 3.50だから。あなたは、あることが起こっているどのようなタイプだと思いますか? ここで我々が​​持っているタイプがあります。 我々はbools、整数、浮動小数点、文字列、配列、オブジェクトを持っている 曖昧なの一種であり、次にリソース、。 私は、例えば、ここで実際にあると思う。 NULLがあります。 NULLは特殊なタイプです。 NULLは単にアドレスが0のポインタはCとは異なり、 PHPで、NULLはそのタイプの唯一の有効なものがNULLである独自のタイプです。 これは、はるかに有用なエラーチェックのためです。 我々はあなたがNULLを返す場合、この問題を持っていたC言語では、 あなたはNULLポインタを返すか、エラーを示すためにNULLを使用しているわけではないこと または我々は1の時点で持っていた混乱のすべて。 ここでは、NULLを返すことは、一般的にエラーを意味します。 物事の多くは、エラーの場合はfalseを返します。 しかし、ポイントがNULL型で、NULLタイプの唯一のものは、NULLです。 あなたには、いくつかの無名関数を定義することができますようにそして、コールバックです。 これは、関数に名前を付ける必要はありませんが、ここでそれに対処する必要はありません。 彼らは私たちが知っていることを期待しないというタイプでみると、 あなたは3.50のタイプが何であるかと思いますか? >> [生徒]フロート。 うん。 それではここで、あなたはこのタイプが何であるかと思いますか? >> [生徒]配列。 うん。最初のものは、floatであった、2番目の例は、配列です。 この配列はC言語の配列のようなものではないことに注意してください あなたがインデックス0はいくつかの値を持っている持っている場合には、インデックス1は、いくつかの値を持ちます。 ここで、インデックスはa、b、およびcで、値は1、2、および3です。 PHPで連想配列とちょうど規則的な配列に違いはありません あなたはCでそれを考えると同じように そこにちょうどこれで、フードの下に規則的な配列は単なる連想配列です いくつかの値にここで、0のマップと同じようにいくつかの値にマップされます。 このような理由から、PHPは本当に速いコード/ベンチマークの事のためにかなり悪いことができます C言語では配列を使っているとき以来、あなたは、メンバーへのアクセスが一定時間であることを知っている。 PHPはメンバにアクセスするときにどのくらいの時間を知っている人ですか? 正しくハッシュなら、それはおそらく定数です。 誰がそれが本当にフードの下に何をして知っている? あなたは本当にそれがそれに対処するために起こっているのかを見るために、実装を見て必要があります。 それでは、関数fopen。 私はちょうどPHPマニュアルfopenの戻り値の型を見てみましょうここだと思います。 我々はここを参照してくださいあなたはかなりPHPマニュアルで任意の関数を調べることができます これはPHPのマニュアルページのようなものです。 戻り値の型はリソースであることを行っている。 私はそれを見て、なぜ我々は実際にはリソースを定義していないのはそういうわけです。 リソースの考え方は、C言語では、一種のは、FILE *か何かを得た; PHPでのリソースは、あなたのFILE *です。 それはあなたからの読み込みしようとしているものです、それはあなたへの書き込みしようとしているものです。 これは、通常は外部なので、それはあなたがから物事を引っ張って、物事を投げることができるリソースです。 そして最後に、NULLのタイプは何ですか? >> [学生]はNULL。 うん。だからNULLである唯一のものは、NULLです。 NULLはNULLです。 PHPの型システムの一つの特徴は、(良くも悪くも)の種類をやりくりする能力である。 あなたは、異なる型の値を組み合わせたPHPコードの行を記述する場合、 PHPは、賢明なことをやろうとするでしょう。 PHPコードの次の行のそれぞれを試してみてください。何をプリントアウトしている? それはあなたが期待したものですか?それはなぜですか? PHPに関するこの事実は、我々は弱く型付けされたと呼んでいるもの、それを作るものです。 弱く型付けされたと、強く型付けされた、 それらの用語に異なる用途があります。 ほとんどの人は、この種のことを意味するように弱く型付けと強く型付けを使用 ここで、( "1" + 2);それが動作します。 C言語では、それは動作しないでしょう。 あなたは、これが機能していない想像することができます。 多くの人々は、動的型付けと弱い型付けと静的型付けと強い型付けを混ぜる。 Pythonは動的型付けの言語の別の例です。 あなたは、変数の型の周りに投げることができますし、それは実行時に決定するために起こっている どんなエラーcheckings。 Pythonでは、これを実行するために、それが表示されます( "1" + 2)が起こっている。 それはあなたが文字列と整数を追加することはできませんと言うので、これは失敗します。 同じように動的に型付けされているPHPでは、これは失敗しません。 弱い型付けは型で物事を行うという事実に関係しています それは本当に必ずしも意味をなさない。 だから( "1" + 2)を、私は、列12であることを、私は、文字列3がそれを想像することができます想像することができます 私はそれが整数3であることを想像することができます。 それは、必ずしも明確に定義されていない、と我々は、おそらくここを参照してくださいするつもりだ 我々は印刷するときに( "1" + 2)のことを、それはおそらく別のになってしまうために起こっている 印刷よりも、(1 + "2")。 そして、これは悪くも、私の考えでは、傾向にある。 ここでは、これらを試すことができます。 PHPに関する別の小さなトリックは、あなたが実際にファイルを作成する必要はありませんです。 これは、コマンド·モードを実行しているん。 のphp-rのように、我々は、ここでコマンドで投げることができます: "印刷('1 '+ 2);"と私は、新しい行を入れておきましょう。 これは、3を印刷した。 それは3を出力し、それは整数3のように見えます。 だから、今度は他の方法を試してみましょう: "印刷(1 + '2 '); 私たちは3を取得し、それはまた、整数の3になるだろうか?私は正直わかりません。 それは一貫してそのように見えます。 それは、文字列または12のようなものであることの可能性はそのようなことは決してありません あまりにもJavaScriptとJavaと違っているので、PHP、 連結のための独立した演算子を持っています。 PHPでの連結はドットです。 (1 '2 ')印刷は、だから、私たちに12を与えるために起こっている。 これは、人々は、+ = strのような何かをしようと混乱につながる傾向 彼らは文字列の最後に追加したい、それが失敗するために起こっていることをいくつかの他の事。 あなたは、strを行う必要があります= だから、PHPの連結がドットであることを忘れないでください。 試しに他のもの:印刷( "CS" + 50); 私はCS50、その結果、このの見込みがないことを言ってきた 連結は+ではないので。 あなたは、このままで終わるとしているどう思いますか? 私は正直全く見当がつかない。 それはちょうど50年代みたいだな。 これは、文字列を見て、我​​々は123CSを置けば私は賭ける - それは最初の文字列を見て、それはそれからそれから整数または番号を読み取ろうとします。 このケースでは、123CS見ている。 "整数として意味をなさないことなので、私はちょうど123を考えるつもりです。" 123 SO + 50が173になるだろう。 そしてここでは、整数としてこれを読み始めます。 それは何も見えないので、ちょうど、0として扱われます。だから、0 + 50は50になるだろう。 私が想定しているこれは、似たようなことをやろうとしています。 私は99を考えています。 - ええ、それは最初のを取るために起こっているので、 99だから。 これはCであった場合は、ここに(10/7)、それは何を返すでしょう? [学生] 1。 10月7日には2つの整数を分割しているので>>うん、それは1になります。 整数で割った整数は整数を返すために起こっている。 それは次のようになります1点何を返すことはできませんので、それだけで1を返すようになるだろう。 ここで印刷(10月7日)、それは実際にそれを解釈するために起こっている。 そして、これは、あなたが実際にそのような整数丸めとかをしたいと思えばことを意味します あなたは、プリント(床(10月7日))を実行する必要があります; C言語では、それはあなたが定期的に切り捨て整数に頼ることができることをおそらく奇妙なことだ、 しかし、PHPでは、あなたはそれが自動的にfloat型に変換しますができないためです。 そして、(7 +真)、あなたはなるだろうことをどう思いますか? それは1のように真の解釈に起こっている場合、私は8を推測している。 それは8のように見えます。 私たちは、あなたが絶対にやるべきではありません過去10分でやったので、何も。 あなたがこれを行うコードが表示されます。 それはこのように簡単である必要はありません。 あなたは、2つの変数を持つことができ、1変数は文字列であることを起こる および他の変数のデータ型はintであることを起こる、その後、一緒にこれらの変数を追加します。 PHPは動的型付けされ、それはあなたのために型チェックを行うことはありませんので、 そしてそれは弱く型付けているので、それだけで自動的に一緒にこれらの事をスローしますので、 そしてすべてがうまく動作するでしょう、それは、さらにこの変数は、文字列でなければならないことを知ることは困難だ ので、私は整数であり、この変数に追加してはいけません。 ベストプラクティスは、変数が文字列である場合であり、永遠にそれを文字列として保持します。 変数がintの場合は、永遠にintとしてそれを保つ。 あなたは、整数や文字列を扱いたいと考えているなら あなたはvarsintを使用することができます - それはJavaScriptです。 INTVAL。私はこのすべての時間を行う。 PHPとJavaScriptは、私はすべてを混ぜる。 だからINTVALは変数の整数としての値を返すために起こっている。 私たちは "印刷(INTVAL('123 '))を渡した場合、あなたは123を取得します。 INTVAL自体が排他的に整数のことを私たちのチェックをするつもりはありません。 PHPマニュアル、ちょうどそう多くの機能が、ご利用いただけます ので、ここで私は私が使用するかを考える第一IS_NUMERICです。 私は、falseが返されたことを推測している。 それは我々が===向こうで行かなければならない別のことだ。 だからIS_NUMERIC('123df ')は、そのようIS_NUMERIC考えられないだろう。 Cでは、すべての文字を反復しなければならないでしょう と、それぞれの文字が数字または何ですかどうかを確認します。 ここIS_NUMERICは、私たちのためにそれを行うために起こっている そして、それはfalseを返すだ。 だから私はここで私はそれを見て比較しています、それは何も印刷されないことに印刷したとき、 あなたは誤りであることが起こるのですか?それで、今では1を印刷している。 どうやらそれは本当のように真の印刷の代わりに真として1を出力します。 私はしますprint_rを行うかどうかのだろうか。いや、それはまだ1を行います。 ===に話を戻すと、==まだ存在 そしてあなたがトミーに話をすれば、彼は言うだろう==まったく問題ありません。 私は==はひどいですし、==を使用しないでくださいと言うつもりです。 違いは、==は物事を比較するということです 彼らは、同じタイプでなくてもそれが本当であることができる場所、 ===物事を比較して、最初にチェックが彼らと同じタイプですか?に対し はい。さて、私は、彼らが実際に等しくなるように比較するかどうかを確認するつもりです。 それが何を言うか見てみましょう - あなたは10のような奇妙なことに等しい得る。 だから、('10 '== '1 E1'); これは、trueを返します。 なぜこれがtrueを返す誰がどんな推測を持っていますか? それはだけではありません。たぶんこれがヒントです。 しかし、私はfにそれを変更した場合 - それをいけない!私は二重引用符を使用し続ける。 私は二重引用符でこれを入れてきたので、二重引用符が私に叫んでいる理由です。 だから私はここで二重引用符をエスケープすることもできますが、単一引用符は、それが容易になります。 だから、('10 '== '1' F1 ');真印刷されません。 ('10 '== '1 E1');真出力します。 [学生]は六角か? >>それは六角はないが、それはそれのようだということに近いです - 1E1、科学的表記法。 それは1として認識1E1 * 10 ^ 1または何でも。 それらが等しい整数である。 我々は===を行う場合、それは偽になるだろう。 我々がしなければ、私は実際にはわかりません==何(10 '10abc ')について;?かしこまりました。だからそれは本当だ。 、そして、それは20だろう。だから、あなたがしたときに(10 + '10abc ')が好き ここで(10 == '10abc ');本当です。 さらに悪いことのようなものが(偽== NULL)です。本当です か(false == 0)はtrueですが、(偽== []); これらの奇妙な例一つだ - の奇妙なケースがあります。 ていることに注意してください(偽== []);本当です。 ('0 '== false)の場合はtrueです。 ('0 '== []); falseです。 だから==は他動詞では決してない。 bに等しくすることができると、cに等しくすることができる しかし、bがcに等しいではないかもしれません。 それは私に醜態だし、常に===を使用する必要があります。 [学生]は、我々が行うことができます!==だけでなく? >> [ボーデン]はい。 同等のようになります!=と!==。 これは実際のpsetスペックで育っている 機能の多くは、どこに戻す - PHPマニュアルではこのことについて良いです。 それは、 "エラーがある場合、これはfalseを返します。"大きな赤いボックスに入れ しかし、戻って0には、返される完全に合理的なものです。 整数を返すことが期待され、任意の関数を考える。 レッツは、この関数はファイルか何かで行数をカウントすることになっていると言う。 通常の状況下では、この関数のファイルを渡す そして、それは行数を表す整数を返すようになるだろう。 ファイルは単なる空の場合だから0は完全に合理的な数値です。 あなたはそれを不正なファイルを渡すと、関数はfalseを返すために発生しますが、どうでしょう あなたはそれを無効なファイルを渡す場合はどうなりますか? あなただけ行う場合==無効なファイルと空のファイルの間でケースを差別していない。 常に===を使用しています。 それはそれらのすべてです。 PHPでは、配列型は、あなたがCにするために使用しているものとは異なります これが型の配列であることを見たとき、確かに、あなたはすでに、この上記に気付いたかもしれません。 ブラケット構文は、PHPの最新バージョンで、PHP 5.4のように新しく追加されました。 > 1、 'B' - - > 2この前には、必ず( '配列を書かなければならなかった。 つまり、配列のコンストラクタだった。 今PHPがついに、ちょうど角括弧の素敵な構文に回ってきた これは、配列よりもちょうどそんなに優れています。 しかし、PHP 5.4を考慮すると、最新バージョンです あなたもPHP 5.3を持っていない箇所が発生する場合があります。 PHP 5.3以降、我々は、アプライアンスでいたものであった場所夏にわたって、私たちは、この問題に遭遇した しかし、我々はすべて私達の学年の本を配備し、送信しているサーバとすべてのものに PHP 5.4であった。 これを知らず、我々は5.3で開発され、5.4にプッシュ そして今我々のコードの突然なしのすべてが動作し 5.3と5.4の間の変更されていると何が起こったので、 下位互換性がないものは、 そして我々は、PHP 5.4で動作しません私たちの事のすべてを移動して、修正する必要があります。 このクラスでは、アプライアンスは、PHP 5.4を持っていないので、 それは、角括弧を使用しても、まったく問題ありません。 しかし、あなたは、インターネットの周りのものを探しているなら、 もし配列のもののいくつかの種類を探している場合、最も可能性が高いかを確認するつもりだ PHPが生まれた頃から活動しているそのため、この配列コンストラクタ構文綴る と角括弧構文は、過去数ヶ月前から出回っている またはいつ5.4迎えました。 これはどのようにインデックスです。 どのようにあなたは$配列[0]は、$ array [1]は、$ array [2]のように角括弧でインデックスのと同じC言語のように、 あなた指数あなたがインデックスされる文字列を持っているために起こる場合と同じように。 つまり、$配列['']と$配列['B']。 $配列[B]。なぜこれが間違っているでしょう? それはおそらく、警告を生成しますが、まだ動作します。 PHPはそれを行う傾向にある。 それはちょうど、 "私はこのことについてあなたに警告するつもり傾向にあるが、私はちょうど続けるつもりだ "と何でも私がすることができます。" それはおそらく、文字列にこれを翻訳します しかし、それは過去の誰かの中でいくつかの点で言っている可能性があります 'Hello World'のようにbを定義します。 だから今、bは定数と$配列かもしれない[B]は、実際に 'Hello World'とすることになるだろう。 私は、この時点で考えるか、少なくとも私たちのPHPの設定 あなたは配列にインデックスを試してみて、そのキーが存在しない場合、それは失敗します。 私はそれだけを示す警告が表示されないと思う。 またはそれだけで警告を表示しないように、少なくとも、あなたはそれを設定することができ、それだけでまっすぐに失敗します。 あなたが実際にそのようなインデックスがあるかどうかを確認する方法は、issetです。 だからかどうかの判断($配列['Hello World'の ']')はfalseを返します。 判断($配列['B'])がtrueを返します。 あなたは、これらの構文を混在させることができます。 私は、この配列がなってしまうであろう何をかなり確信している - 我々はそれをテストすることができます。 ああ、私はPHPWordを必要としています。 これは、キーが何であるかを指定する構文を混合されている とは、キーが何であるかを指定しません。 だからここ3右側の値です。 あなたが明示的にキーがあると何が起こっているか言っていない。 あなたは、その鍵があることを行っているどう思いますか? [学生] 0。 >>私はそれが我々が指定していない最初のものだという理由だけで、0を推測している。 我々は、実際にこれらの例をいくつか行うことができます。 そうしますprint_rは、再帰的な印刷されています。これは、配列全体を印刷します。 いずれが発生した場合には、配列のサブ配列を出力します。 そうしますprint_r($配列); php.test.php。 それは0を与えたようにそれが見えるん。 そこにここに心に留めておくべきものは、実際に、しかし我々は、第二​​にそれに戻りましょう。 しかし、私がこのインデックス1を作るために起こる場合はどうなりますか? PHPは、文字列の添字と数値添字を区別しません そう、この時点で私はちょうどインデックス1を定義していると私は両方の配列$ a [1]と$配列['1 ']を行うことができます そしてそれは、同じインデックスと同じキーになります。 だから今は3になるだろう何をどう思いますか? >> [生徒] 2。 >> [ボーデン]私は2を推測している。 うん。それは2です。 私たちは、これが10でなかった場合は、これは4とは何ですか?あなたは3点のインデックスであることを行っているどう思いますか? 私は11を考えています。 PHPはどんなことをしている私の推測では - と私は前にこれを見ていると思う - それだけで、それまでに使われている最高数値インデックスが何であるかを追跡しています。 それは、3つの文字列にインデックスを割り当てるに行くことはない。それは、常に数値のインデックスになります。 だから、10であることを起こる、それがこれまで割り当てられている最高の1を追跡します そしてそれは3から11を与えるために起こっている。 私が前に言ったこと、それはこの配列を印刷する方法がわかります。 これは、キー10、キー4キー11、キーdを出力します。 あるいは実行してみましょう - 私は0を入れていないと思いますが、それは印刷1、2、3、4です。 私はここで何を切り替える場合はどうなりますか?または、実際にこれらのスイッチ2をしてみましょう。 今では、2、1、3、4を出力します。 PHPの配列は通常のハッシュテーブルのようなだけではありません。 これは、ハッシュテーブルの時間の99%として考えることは完全に合理的です。 しかし、あなたのハッシュテーブルで物事が挿入された順序には意味がありません。 それで、あなたは、あなたのハッシュテーブルに挿入するとすぐに そこにはリンクリストはありませんし、あなたがリンクされたリスト内で判断できると仮定 その最初に挿入された。 しかし、ここでは最初の2を挿入し、それは2が最初に来ること、この配列をプリントアウトしているとき、それは知っている。 それだけで、任意の順序でそれをプリントアウトしていません。 それが使っているという技術的なデータ構造は、順番付けられたマップです ので、キーを値にマップし、それはこれらのキーが挿入された順序を覚えています。 基本的には、それが実際に迷惑なんだいくつかの合併症がある - Let 'sは、あなたが配列0、1、2、3、4、5を持っていると言う そしてあなたは、インデックス2を出したい。 それを行うための一つの方法は、それがどのようなものか見てみましょう。 0、2、1、3、4。 unsetは、変数や配列のインデックスの両方の設定を解除することを起こる。 そうしますunset($配列[2]); 今度は何これが見えるように起こっているのか? 2はちょうどなくなっているので、それはまったく問題ありません。 あなたは物事が実際には配列のようになりたい場合はより面倒です。 私はランダムな数字を出してあげる。 今私のインデックスに注目してください。 1 - 私はそれがちょうどそれが0からな長さになりますC言語の配列のようになりたい そして私はそういうものとしてそれを反復処理することができます。 しかし、すぐに私は2番目のインデックスの設定を解除すると、インデックス3で何があったが、今ではインデックス2にはなりません。 代わりに、それはちょうどそのインデックスを削除して、今、あなたは0、1、3、4に進みます。 これは完全に合理的です。 それだけで迷惑なんだとは、配列のスプライスのようなものを行う必要があります。うん。 [学生]は、ループのために持っていた場合、何が起こるでしょう とは、すべての要素の上に行きたかったの? それは2を打ったとき、それは今まで得でしょうか? 配列を反復処理する。あなたがそれを行うことができる2つの方法があります。 forループのレギュラーを使用することができます。 これはPHPの別の複雑さです。 ほとんどの言語は、私が言うと、長さはlenか何かのいくつかの並べ替えを持っている 配列の長さを示す。 PHPでそれは、カウントです。 だからカウント($配列); $ i + +)の ただプリント($配列[$ i])としてみましょう; 注意:未定義のオフセット:2。 それだけで失敗になるだろう。 これは、ほとんどの部分は、あなたがこのような配列を反復処理する必要はありません、理由です。 それは過言かもしれませんが、あなたはこのような配列を反復処理する必要はありません PHPは、foreach($配列として$アイテム)はforeachの構文が提供されるためです。 今、私たちは、印刷する場合($アイテム); - we'll第二にそれを議論する - 完全に正常に動作している。 foreachが動作していることの方法は、最初の引数は、繰り返して配列していることです。 forループの各パスに通して、第二引数、項目、 それは、配列内の次の事に取るつもりです。だから配列が秩序を持って覚えている。 forループを介して初めて、その項目は123になるだろう それはそれはそれはそれは213になり23になり13になり12になります。 あなたは、foreachのような何かをするときに物事が本当におかしくなる。 あなたがこれを行うべきではありませんので、何が起こるか見てみましょう。 何なら、私たちますunset($配列[1]); それは、おそらく期待されていた。 この配列を反復処理している、とするたびに、最初のインデックスの設定を解除している。 だから、インデックス0のために、まず、項目の値は0にかかるので、123になるだろう。 しかし、内側のforループは我解除インデックス1、なるように、12が消えていることを意味します。 だから、印刷します。 PHP_EOL。 PHP_EOLは改行だけですが、それは技術的にはよりポータブルだ Windowsでの改行は、MacとUNIX上で改行が異なっているので。 Windows上で改行\ r \ nを、他のどこでも、一方、それだけで\ nをする傾向がある。 PHP_EOLは、それはあなたのシステムの改行が何であっても使用するように構成されている。 だから、それを印刷してください。終わりにしますprint_r($配列)のないようにしましょう​​。 私は行動であろうと見当もつかなかった。 アイテムは、まだ我々はこれまでに配列からそれに着く前に、我々は12の設定を解除するにもかかわらず、値12をとる。 これで私の言葉を取るが、foreachは配列のコピーが作成されますように見えません そのアイテムは、そのコピーのすべての値を取ります。 あなたは、forループ内の配列を変更するので、たとえ それは気にしないだろう。項目は元の値になります。 それを解除してみましょう。 これは$配列の場合は何[1] = "こんにちは"; 我々は配列には "hello"を入れていても、アイテムはその値を取ることはありません。 ループをforeachのための別の構文があります どこに矢印で区切って2つの変数を置く。 この最初の変数は、その値の鍵になるだろう そしてこの第二の変数は、同じ正確なアイテムになるだろう。 これは、ここで興味のあるものが、私たちは '私たちのオリジナルのケースに戻ってしまったら - > 1、 'B' - > 1、 我々だけのアイテムとして各アレイに対して繰り返し処理する場合、ここでは、アイテムは毎回1になるだろう。 しかし、我々はまた、その項目に関連付けられているキーを知りたい場合 > $アイテム - そして我々として$キーの操作を行います。 ":"だから今我々は、印刷($キーを行うことができます。 今では、繰り返し処理を行うと、各キーとそれに関連付けられた値を印刷している。 我々は、foreachループ内で行うことができます追加のものがあるときは、次の構文を参照してください可能性があります。 変数名の前にアンパサンド(&)は、PHPが参照を行う方法になる傾向があります。 参照はポインタと非常に類似している場合、 あなたは、ポインタを持っていないので、直接メモリを扱うことはありません。 しかし、あなたは1つの変数は他の変数と同じものを指す参照を持っている。 ここの中でアイテム$を行いましょう。のは、1、10に戻りましょう。 アイテム$を実行してみましょう+ +;それは、まだPHPで存在しています。あなたはまだ+ +を行うことができます。 php.test.php。私はそれを印刷する必要があります。ますprint_r($配列); 我々は2、11を印刷してください。 私はちょうどしますforeach($アイテムとして$ array)をやっていれば、その項目の値は1になります 最初のループで。それは、我々が終わった後2から1をインクリメントします。 だから、それはループの2回目のパスを通過しますと、その項目は10です。 それはインクリメント11〜項目、その後は捨てている。 その後、我ますprint_r($配列)であり、これはちょうど1個、10個であることを確認してみましょう。 それで我々がしたインクリメントが失われました。 しかし、foreachの($配列として$&アイテム) 今、この項目は、ここでこの権利と同じ項目です。それは同じことだ。 だから$アイテム+ +は配列0を変更している。 基本的に、あなたはまた、$ kを行うことができます - > $アイテムを、あなたが$を行うことができます配列[$ k]は+ +; ことを行うので、別の方法、私達が項目を自由に変更できます、 それは私達の元の配列を変更しないでしょう。 私達が私達のキーであるkを使用している場合しかし、その後私達はちょうど私達の配列へのインデックスは、そのキーを使用してすることができます とすることをインクリメントします。 これは、より直接的に私たちの元の配列を変更します。 何らかの理由で変更する機能を望んでいた場合でも、それを行うことができます - 実は、これは完全に合理的です。 あなたは、配列$を記述する必要はしたくなかった[$ k]は+ + あなたはたったの$項目を書きたい+ +あなたはまだ($ K === 'a')の場合、言いたいこと そのアイテムをインクリメントしてから私たちの配列を出力します。 だから今我々はしますprint_rが何をすべきかを期待していますか?どんな値が印刷されるべきである? [生徒] 2と10。 >>キーは '我々が実際にそれを印刷したいのであった[ボーデン]場合のみ。 おそらく、非常にまれに、かつてなら、PHPで関数を定義する必要がありません しかし、あなたはどのような関数のような関数を定義するようなものが表示される場合があります。 通常あなたが言う($ fooと$ bar)をし、それが何であると定義することになります。 私はこれを行うにはしかし、もしそれが、何が何でも呼び出すことを意味します bazが呼び出すものは何でも、バズに渡される最初の引数を変更することができるようにします。 $ fooを実行してみましょう+ +; ここの内側にbazを($アイテム)を行うてみましょう; 今、私たちは、関数を呼び出している。 引数が参照によって取得され、これはつまり、我々はそれを修正した場合 私たちは、渡されたものを変更している そして、我々が期待するこれを印刷して - 私は構文を台無しにしない限り、 - 私たちは、2、11を得た ので、それが実際にインクリメントされた。 我々は2つ​​の場所で参照を必要とすることに注意してください。 私はこれをしなかった場合はどうなりますか?これはどういう意味ですか? [学生]それは変更されます。 >>うん。 項目は、配列内の値だけをコピーしたものです。 だからアイテムが2に変更されますが、配列は['A']はまだ1になります。 または私はこれを行うにはどうすればよいでしょうか。 今アイテムは、bazへコピーとして送信されます。 だから引数のコピーは、2にインクリメントされます が、項目自体は2にインクリメントされませんでした。 そしてアイテムは、配列ブラケット何と同じものです そう、その配列はインクリメントされませんでした。 だから、両方のそれらの場所はそれを必要とする。 PHPは通常、この程度はかなりスマートです。 あなたは、私が参照渡ししたいと思うかもしれない - これは実際のpsetのいずれかに問題であった。 それは、それは言っquestions.txtものだった なぜあなたは、参照することによって、この構造体を渡したいのでしょうか? それに対する答えは何でしたか? [学生]だからあなたは大きな何かをコピーする必要はありません。 >>うん。 構造体は、任意の大きさにすることができ、あなたは、引数として構造体を渡すとき それは、関数に渡すために、その構造体全体をコピーする必要があります あなただけの参照によって構造体を渡す場合、一方 それは単に関数への引数として4バイトのアドレスをコピーする必要があります。 PHPは賢くそれよりも少しです。 私はいくつかの機能を持っていると私はそれに千の事の配列を渡すと、 それはそれはそれらの事のすべて千をコピーする必要があるとしているわけではない 関数にそれを渡す方法は?それはすぐにそれを行う必要はありません。 この関数の内部の場合、それは実際にfooを変更しません、 もしそうであれば($ fooは=== 'こんにちは')がtrueを返す。 私たちが実際にこの関数の内部で引数が変更されることはありません注意してください、 これは、fooがコピーされる必要があることがないように何が渡されたことを意味します それを変更していないからだ。 PHPの動作は引数は常に参照渡しされるようにする方法 あなたが実際にそれを修正しようとするまで。 私は$ fooを+ +と言えば今、それはすぐに元のfooのコピーを作成し、そのコピーを変更します。 これは、いくつかの時間を節約できます。 この大規模な配列に触れることはありませんしている場合は、実際にそれを変更することはありません、 それは、コピーを作成する必要はありません 我々はちょうどそれがあってもそれをコピーしないことを意味し、このアンパサンドを付ける場合、一方 あなたはそれを修正しない場合でも。 この動作は、コピーオンライトと呼ばれています。 あなたは、オペレーティングシステムのコースを取る場合は特に、他の場所でそれを見ることができます。 コピーオンライトは、あなたが何かのコピーを作成する必要はありませんかなりいつものパターンです それは実際に変化している場合を除きます。うん。 [学生]テスト内部インクリメントしていた場合はどうなります、 そう千のうち、唯一の1つの要素を変更する必要があるでしょうか? 私はよく分からない。 私はそれが全体のことをコピーだと思うが、それはそれは十分にスマートだ可能だ - 実際に、私は何を考えている、我々はこのような配列を持っていたと想像されます:$ array2を= [ そして、インデックス '[1 2 3 4]、の配列であり、インデックス' b 'は何の配列です。 私はそれらのすべての間にはカンマが必要です。カンマがあると想像してみてください。 その後、 'c'は値3です。 オーケー。 今すぐみましょう我々は$ bazを($配列2)を行うと言う。 どこbazは参照することによって、これを取ることはありません。 つまり、$ fooは['C'] + +; これは、我々は引数として配列2を渡しているような例です。 そして、次に、それは、それをインクリメントすることにより、配列の特定のインデックスを変更している。 私は正直、PHPは何をするつもりなのか見当がつかない。 、それは、簡単に全体の事のコピーを作成することができますが、それはスマートだ場合 これが、その明確な値を持つことになり、これらのキーのコピーを作成します しかし、これはまだ同じ配列1,2,3,4を指すことができます そしてこれはまだ同じ配列を指すことができます。 私はiPadそれをよ。 ここで、[1,2,3,4] 3〜この男がポイント、この男を指し、我々は、この配列を渡す に、この男はポイント[34、...] 今、私たちはバズにそれを渡していることを、我々はこれを修正しています。 PHPがスマートであれば、それだけで行うことができます - 我々はまだいくつかのメモリーをコピーしなければならなかったが、これらの巨大な入れ子のサブアレイがあった場合 我々はそれらをコピーする必要はありませんでした。 それがそれが何だかどうかはわからないが、私はそれがあることをやって想像することができます。 これは、PHP上のCの非常に大きな利点です。 PHPは、多くのことのために人生がそんなに簡単になります しかし、あなたの種類は、それがどのように実行されるかだけでなく、全く見当がつかない それは物事のこれらのコピーを作っているときに私はボンネットの下に見当がつかないので、 ああ、それは一定のタイム·コピーであることを行っている、 それだけで1つのポインタを変更しようとしている、それは途方もなく難しいリニアコピーになるだろうか? それはスペースを見つけることができない場合はどうなりますか? それはいくつかのより多くのスペースを得るためにガベージコレクションを実行する必要がありますか? とガベージコレクションが任意に長い時間がかかります。 Cでは、これらの事を心配する必要はありません。 あなたはそれを実行するために起こっている方法については、かなりの理由ができ書き込む毎に一行。 これらを振り返ってみましょう。 それはあなたがハッシュ関数に対処しなければならないことをどのように素晴らしいですが、 リンクリスト、またはそのような何か? ハッシュテーブルを扱うので、ここでは上で動作するように楽しいパズルだが、今ではとても簡単です。 unique.phpという名前のファイルを開き、その中にPHPのプログラムを書く (また、 "スクリプト"として知られている)。 彼らはあなたがコマンドラインで実行することを短いものなら、我々はそれらのスクリプトを呼び出すために傾向がある。 あなたがコンパイルできませんが、実行可能ファイルを実行しようとしている基本的には、任意の言語 コマンドラインでは、その実行可能なスクリプトを呼び出すことができます。 私も同様に、これを実行し、Cプログラムを書くことができます 私が最初にそれをコンパイルしてバイナリを実行して以来、私はそれスクリプト呼び出すことはありません。 しかし、我々はスクリプトを呼び出すつもりだこのPHPプログラム。 または我々はPythonやPerlやNode.jsのか、それらのもののいずれかでそれを書いた場合、 あなたがコマンドラインでそれらを実行するため、我々は彼らのすべてのスクリプトを呼び出すと思います しかし、我々はそれらをコンパイルしないでください。 我々は、かなり迅速にこれを行うことができます。 我々は、argvを使用するつもりはありません。ただこれを爆破してみましょう。 それはユニークな呼び出し、プログラムを書く。 あなたは、入力が1行に1つの単語が含まれていると仮定することができます。 実際には、argvを使うのは非常に簡単になります。 unique.php。 最初のものは、最初に、私たちは1コマンドラインの引数が渡されているかどうかを確認したいと思います。 あなたがC言語でargcとargvを期待するのと同じように、我々はまだPHPでそれらを持っています。 ($ argc変数!== 2)もしそうなら、私はメッセージか何かを印刷して扱うことはありません。 私はちょうど、1のエラーコードを終了します。 また、私は1を返すことがありました。 我々はどこにいることはほとんどPHPで、この状態ではありません - 通常は、関数によって呼び出される関数によって呼び出される関数によって呼び出される関数にしている。 と何かがうまくいかないと、先ほど完全にすべてを終了する場合は、 出口は、単にプログラムを終了します。 また、これはC言語で存在 あなたは、関数内の関数内の関数内の関数であれば そしてあなただけのプログラムを強制終了したい場合は、あなたは、exitを呼び出すことができ、それだけで終了します。 しかし、PHPでそれは我々がこのトップレベルであること、さらに稀だ。 通常、我々は関数のいくつかの並べ替えの中にいるので、私たちは出口を呼び出す 我々はその後実現1事を返さなくてもよいようにエラーがあり それはエラーがあった場合に認識するように、最大​​を返します。 私たちはそう(1)を終了し、それに対処する必要はありません; リターン(1)、この場合に相当するだろう。 その後、我々はオープンしたい私たちは、fopenしたい。 引数は、かなり似て見に行くされています。 我々は、fopen($ argv [1]にしたい、と我々は読書のためにそれを開きたい。 それは我々がfを呼び出すつもりリソースを返します。 これは、我々はFILE *を言わなければならない点を除き、Cはそれをしない方法にかなり似ています。 代わりに、私たちはたったの$ fを言う。オーケー。 実は、私はこれがあっても私たちにファイルと呼ばれるPHPの関数のヒントを与えると思う。 PHPファイル。 これが何をやろうとしていることは、配列にファイル全体を読み込むです。 あなたも、fopenのそれをする必要はありません。それはあなたのためにそれを行うために起こっている。 つまり、$行=ファイル($ ARGV [1]); ここで、ファイルのすべての行は、行にあります。今、私たちは、行をソートしたい。 どのように我々は行を並べ替えることができますか? 我々は、行をソートします。 そして今、我々はそれらか何かを印刷することができます。 おそらく最も簡単な方法は、foreach($行$として行)行$をエコーである; [学生]は、私たちも、並べ替えに何かを参照することにより、ラインを越えることはありませんか? ソートは関数sort(&$配列)として定義されるであろうところです。 関数を呼び出すときには、参照することにより、それを渡すことはありません。 これは、参照としてそれを取って、それを定義する関数です。 これは、何が悪かったのか、正確に実際にある 我々は5.3から5.4に行ったときに我々は我々のサーバーにすべてをかけるとき。 5.4までは、これは完全に合理的であった。 関数は、参照としてそれを取ることを期待されていませんが、参照として渡すことができます 関数は、それを変更してしまったそうだとすれば、それはまだ修正されている。 5.4の時点で、あなたはこれを行うことになっていない。 関数が明示的にそれをしない場合は、だから今は、参照によって渡す唯一の方法です。 あなたはそれを変更したくない場合は、コピー$ = $行とパスコピーを行う必要があります。 だから今の行が保持され、コピーが変更されます。 php.unique.php。私は何かを台無しにした可能性があります。 予期しない 'ソート'。 私たちのためにこれを行い何かが行われる予定です。 それもなさそうだ。 あなたが最初の引数が配列であることが期待されていることを説明書を読むときに注意してください そしてそれは、参照によって撮影です。 なぜこのようなことが私に文句を言っている?私は私がしたくないことをここではまだ、この関数の並べ替えを持っているからである。 さて、php.unique.php。私は、ファイルを持っていないので、私はそれを引数を渡していませんでした。 それはtest.phpを上php.unique.phpだ。 ここではすべての素敵なソートされた順序でプリントアウトtest.phpをである。 ソートされた順序は、コードファイルの変なの一種であることに注意してください 私たちの空白行はすべて最初の来ることを行っているので その後、私たちの1レベルのインデントのすべてを来るつもりです その後、私たちの無圧痕のすべてを来る。 うん。だから>>ソースコードのためにそれが参照渡しされませんでした[学生]? その一般的には値によって渡されますか? [ボーデン]は、関数を呼び出すときは、それが参照で渡されたかどうかを判断することはありません。 それは参照によって渡されたかどうかを判断する関数の定義です。 とソートの関数定義を見たり、ちょうどこれを見て、 それは、参照によって引数を取ります。 だから関係なく、あなたがそれを参照することによって、それを利用したいかどうか、それはありませんを参照してそれを取る。 これは、所定の位置に配列を変更します。 これは、単に許可されていません。あなたがこれを行うことは許されていません。 >> [生徒]ああ、大丈夫。 [ボーデン]これは、ソート、参照によって行を取得し、それを変更しようとしている。 あなたはそれがあることをしたくなかった場合は、もう一度、あなたは一種のコピーを作ることができます。 このような場合であっても、コピーが実際に行のコピーではありません。 それは最初に修正されるまで、それは同じことを指して、 それは最初のソート関数で変更さ得るために起こっている場合には、 ここで、それのためのコピー·オン·ライト、今やコピーのコピーが作られようとしています。 また、これを行うことができます。それはあなたがアンパサンドを見ることができる他の場所でもあります。 あなたは、foreachループでそれを参照してください、あなたは、関数宣言ではそれを参照してください ただ変数を割り当てるとき、あなたはそれを参照してください。 今、私たちは、これをすることによって何を達成しなかった コピーと線は文字通り同じことだからである。 あなたが行を使用して交換してコピーすることができます。 、それが未設定の行をしません、あなたは、unset($ copy)を行うことができます あなただけの同じものへの参照を失う。 したがって、この点のように、今の行は、行にアクセスできる唯一の​​方法です。 質問はありますか? うん。 完全にオフトピック[学生]が、指定してPHPを閉じる必要はありません - あなたがいない。>> オーケー。 [ボーデン]それはそれらを閉じるには、悪い習慣だと言うように、私は限り行くだろう。 それは、特にスクリプトで、おそらく過言では しかし、私はこれをすれば何が起こるか見てみましょう。 それは何もしなかった。私が望んでいる場合 - [ため息] 私は、引数を渡す必要があります。 撃つ。私はそれが間違って呼ばれる。 引数を持つのでphp.unique.php。 今私もこれを必要としません。 私はそれを有効な引数を渡します。 これは、印刷の何でも印刷されています。 私はコピーを印刷しているとコピーは存在しません。行だから。 それは、すべてを印刷した後、ここにすべてのこのジャンクを押し気付く PHPタグの外にある何かであるため、PHP 文字通り印刷されようとしている。 なぜHTMLのだね、それは私がdiv何とか、何とか、何とかクラスまたは何を、行うことができるようにうれしいです その後、何とか、何とか、何とか、いくつかのPHPコードを実行してから終了のdivを行う。 そして今、私はPHPのプリント、下部にdivを、すべて、トップアップ私の素敵なdivを取得し、これを印刷します。 このような何かが発生したときに悲惨な、これは、かなり一般的です ファイルの末尾に改行だけ浮遊。 あなたはそれがたいしたことであろうとは思わないだろう あなたはそのブラウザで事実を考慮するまで - どのように仕事をリダイレクトするか、基本的に任意のヘッダの仕事、 あなたはウェブサイトへの接続を作成し、それはすべてのこれらのヘッダや物事を返したときに、 200応答または応答リダイレクトまたは何のような、 データの最初のバイトが送信されるまで、ヘッダーにのみ有効です。 あなたは、何千回もリダイレクトされますが、できるだけ早くデータの最初のバイトが送信されるようにすることができます あなたは再びリダイレクトになっていない。 あなたは、ファイルの一番下に浮遊改行がある場合 そしてあなたは、この関数を使用してからにしたいとしましょう​​ - それがindex.phpの別のファイルだと言うと、あなたが何かをするrequire_onceましょう - 私はそれの良い例を考えることはできません。 下部に、この行がエコーされるときに問題が発生します。 あなたはまだエコーされているために何かをしたくない。 あなたはエコーばかり何にも意図していなかったにもかかわらず、何かが反響したのですか とだから今、あなたはそれ以上のヘッダーを送ることになっていない 、あなたが不満を取得するつもりだ。 あなたはただそれらの終了タグを必要としません。 あなたは、HTMLで何かをすることを計画している場合 - そして、それはここでdivを下にやることは完全に合理的な何でも そして、この時点では、またはあなたがそれらを含めることはできませんすることができます。 それは本当に問題ではありません。 しかし、PHPスクリプト内でそれを閉じるためにまれです。 すべてがPHPである、絶対にすべて、 あなたは本当にそれを閉じるために/あなたがそれを閉じないでくださいする必要はありません。 文字列を扱うことでよりもはるかに進歩しています PHPにおいては、単一引用符または二重引用符で文字列を指定できます。 単一引用符を使用すると、 "エスケープ"シーケンスを使用することはできません。 絶えず、何とか、何とか、何とかをエスケープします。 だからprintfのPHPで非常にまれです。 PSET 5にはsprintfのか何使用 - 私は事のようなものをやってみたかった場合、私はprintfを使用するだろうと思います。 しかし、あなたは001.jpg 002.JPGとやってみたい。 だから私は、実際に私はprintfを使用するテキストの書式を設定したい、そういったことのために。 しかし、そうでなければ私はただの文字列の連結を使用することになります。 私は実際にprintfを使用することはありません。 私達はちょうど単一引用符と二重引用符の間に詳細を差別化している。 最大の違いは、単一引用符が、それは文字通り印刷されるということです。 PHPにはcharデータ型がありませんが、C言語とは違って、これはこれに相当します。 彼らは両方の文字列だ。 と単一引用符を文字列についての素晴らしい事は、私が言うことがあるの 'Hello World!'を何とか、何とか、何とか、 $ $ WOOO。 私は、これは、文字通りそれを印刷している印刷したとき何が起こる。 私達のもののすべてを取り除くましょう。 つまり、$ str1をエコー; 、ドル記号($):これは文字通りそれらの事のすべてを印刷 あなたが改行されると思うだろうバックスラッシュN、 - それらの事のすべては、それが文字通り出力します。 あなたはエスケープする必要がある唯一のものは、単一引用符です なぜならそうでなければ、それは一重引用符が閉じていると思うだろう。 二重引用符、完全に異なる。 我々はすでに、構文の強調表示は、約恐ろしく間違って行くことは何の上で私たちをcluingさを参照してください。 php.unique。未定義の変数:WOOOこれはWOOOという変数として解釈されるためです。 二重引用符を使用すると、中に変数を挿入してみましょう - $名前= "ロブ"と言ってみましょう; だから、 "こんにちは、私の名前は名$です!"エコー; これは、変数としてこれを認識しています。 私はそれを実行したときに - 私は改行を挿入します - こんにちは、私の名前はロブです!とHello World! 私は上記のWOOOの印刷を決して取り除かないためです。 あなたが行うことができ、さらに1ステップがあります。 $配列= [1、2、3]; 私は配列の最初のインデックスを印刷したい場合はどうなりますか? あなたは$配列[0]を実行します。 構文の強調表示は、手がかりとなる。これは何をするつもりですか? php.unique。 こんにちは、私の名前は、1です!これは私が欲しかったものではありません。 シンタックスハイライ​​トは私に嘘をついた。 > 1、 'B' - - > 2レッツ 'してみてください。 それは私がそれを書かなければならないだろう方法は以下の通りです。 予想外の単一引用符(何とか、何とか、何とか、何とか、何とかT_ENCAPSED)。 アイデアは、それが配列の一部としてこれを認識していないということです。 これは、文字をイ​​ンデックスとする配列としてこれを認識していない。 あなたは、中括弧で囲まれたことをやってみたい そして今、この中括弧内にあるものは何でも、補間されます それは我々が魔法のように右の場所にこれらの変数を挿入するための使う言葉です。 今すぐphp.uniqueは、これをやって、そしてこんにちは、私の名前は、1です!予想通り またはこんにちは、私の名前はロブです! 単一引用符のいいようなものだ一つのことは、ということです - 補間にはいくつかのコストがあります。 あなたは二重引用符を使用する場合は、インタプリタは、この文字列を上に行かなければならない "ああ、ここでは変数です。今私は、その変数を取得し、それをここに挿入して行く必要があります"、ことを確認すること あなたは、任意の変数を使用しない場合でも、 これらの二重引用符の内側には何も補間する必要はありません それは二重引用符を通す必要があるので、それはまだ動作が遅くなります 補間する必要があるものを探しています。 何も補間する必要がない場合ので、単一引用符は、少し速くすることができます と私は 'こんにちは、私の名前は'も、一重引用符を使用する傾向がある。 $配列['A']とにかく。 それは私たちが前に持っていたものと同等になるだろう。 しかし、それは好みの問題だ。 PHPを使用している場合は、おそらく速度差を気にしないでください。 で始まるように、それらを理由に不足しています。 任意の最終的な質問はありますか? 私たちは、実際にも、それのすべてを取得できませんでしたが、このようなものは退屈だった。 PHPでの素敵なものだ最後の事は、あなたがHTMLを扱っているときです あなたは、変数を印刷するためにそれを少し、とても素敵ショートカット構文を使用します。 ここでPHPをかけることなく、これはショートタグと呼ばれています。 公式にはPHP 5.4のように、これは推奨されません。 あなたは、phpを置くことをお勧めします。 これはまだ、<ととても短いタグをサポートされていますか?=まだ完全に大丈夫です。 それは、サポートされているデフォルトであるため、あなたが望むようにあなたはこれらを使用することができます、そして、彼らは非常に便利だ。 何か質問? かしこまりました。 、サンディエゴ上品滞在。 [笑い]を さようなら。 [笑] [拍手] [笑] [CS50.TV]