【侍エンジニア#2】サーバーとクライアント、理解したものを駆使することについて。

プログラミング

こんにちは、のくと申します。

 

侍エンジニアの2回目の講座が終了したので、その内容をまとめつつ、自分の学びになったものをみなさんに共有したいと思います。

 

PHPを扱う上で大事な概念。クライアントとサーバーについて

今回の講座で初めに説明されたことは、クライアントとサーバーに関することでした。

 

PHPでformタグの内容を送信する際、HTMLのタグにはnameやmethodやactionなど様々なプロパティを設定しますが、全てに意味があり、正しく理解することでプログラムの流れをより明確に捉えることができるようになります。

 

今回の講座で私が理解したのは、このようなプログラムの流れです。

このプログラムでは、入力フォームの中に入れた内容を、送信ボタンを押すことでその下に出力するようにしたものです。

サンプルはこちら

 

ここでformタグの様々なプロパティについて説明を試みたいと思います。

 

まずは、formタグ自体についているactionとmethodについてです。

Actionに指定したものは、送信ボタン(submit)を押した時に移動したいファイルの名前を入れます。

私は当初、actionで指定したファイルに移動するものだと理解していましたが、より正確には、actionで指定したファイルを自分のデバイスまで呼び出してくださいと依頼をかけるようなことだそうです。

つまりsubmitを押した瞬間にsample.phpをサーバーに問い合わせ、それが見つかったら自分のデバイス(クライアント)まで送信するので自分のデバイスでのみ完結しているわけではなく、インターネットを通してサーバーを介することで初めて自分の元にactionで指定したファイルを届けてくれるようになります。

 

さらに、methodでpostを指定することで、そのフォームに入力された値に対してnameに登録した値を名付けて送信するように動いてくれます。

 

この写真の例でまとめると、text属性のinputタグに入力された値は、submitすることでその値にsentenceという名前がつけられてサーバーに届けられます。

そして、sentenceという名前をつけたtext属性のinputタグに入力された値はsample.php(自分自身)とともに自分のPC(クライアント)まで運んでくれます。

 

ここで、先頭のPHPのプログラムを見てみると、sampleという関数が定義されているのがわかると思います。

二日前の私では意味の分からなかった内容になっていますが、今ならわかります。

この関数を言語化すると、もしsentenceという名前のタグに値が入っていたら6,7行目の内容を実行し、そうでなければ9行目、空の文字列を返す、という関数です。

 

本当は6,7行目だけでも良いのですが、このようにすることで初めてページを読み込んだ時に28行目のechoで何らかの文字が出力されてしまうことを防げるのです。

理由はsentenceというnameのinputタグに何も入力していないから、です。

 

改めてクライアントとサーバーについて私の理解したところをまとめると、

  • クライアントとは自分のPCなどのデバイスのことで、サーバーはクライアントから依頼を受けてファイルを送信するところである
  • Formタグはクライアントとサーバーを行き来する機能を持たせる
  • Submitが実行されると、formタグにつけたmethodを、actionで指定したファイルに向けて実行する
  • Postというmethodでは、submitが押された際inputやtextareaに入力された値を、そのタグにつけたnameをくくりつけてサーバーに送信する
  • $_POST[‘’]は、postメソッドでサーバーに送信された、’’で挟まれたnameを持つ値を取得することができるものである

文章化するのは少し難しいのですが、講座を受けながら自分で考えたプログラムを訂正していくうちにだんだんと腑に落ちてきたのが実感としてありました。

 

基本に忠実に。習ったことの組み合わせで解ける演習問題を用意してくれる

そして今回のもう1つ大事な学びは、あれもこれもと手を出しすぎないこと、つまり基本に忠実であることでした。

 

今回習った内容は、Progateで言えばPHP 1の中の内容しか使いませんでした。

しかし自分で一からプログラムを組み立てるのは、非常に難しく、ProgateのPHP 1の内容をわかっていたつもりだったことを痛感しました。

 

PHPの世界も奥が深く、できることはたくさんありますが、まずはその基本がなっていないと応用を効かすこともできません。

 

講師の方も生徒のレベルに合わせて課題を出してくれると思うので、私は今理解している技術や、今なら理解できる技術のみでその課題を解決できるように考えることが重要だと教わりました。

 

意味もわからずclassを使ってみたり、$thisを使ってみたりするのは、しっかり理解するか講師の方に質問しまくってからの方が良いでしょう。

 

目の前の階段を登っていくことが、より高いところまで行く確実な手段です。

これからも頑張っていきたいと思いました。

 

長くなりましたが、今回はこの辺りで終わります。

最後までお読みいただきありがとうございました。

コメント