Windows

Visual Studio CodeでPHPデバッグをおこなう方法(その3)

今回(その3)ではPHPの拡張機能「XDebug」のインストール方法を説明いたします。

続きを読む



Visual Studio CodeでPHPデバッグをおこなう方法(その2)

Visual Studio CodeでPHPデバッグをおこなう方法(その2)

その1ではPHP実行ファイルのパスの指定までおこないました。今回(その2)ではVisual Studio Code(以下VSCode)の拡張機能「PHP Debug」のインストール方法を説明いたします。

続きを読む



Visual Studio CodeでPHPデバッグをおこなう方法(その1)

Visual Studio CodeでPHPデバッグをおこなう方法(その1)

かつてSublimeTextやAtom等のヘビーユーザーだった人もVisual Studio Code(以下 VSCode)へ乗り換える例が多くあるほど、近年人気のエディタVSCodeですが、VSCodeを活用したデバッグ(※1)はどのようにしておこなうのでしょうか。
今回はWeb制作の現場で広く使われている言語、PHPを使用した場合を想定して説明をおこないたいと思います。

続きを読む



新人奮闘記2

今回はMVCモデルで書き始めた、一般的なフォームを作成していきます。

簡単なフォームであれば、MVCモデルで書かずとも可能でしょうが、大きなプログラムになるにつれて、コードの見直しやメンテナンスが、難しくなってきます。

まず、MVC(Model View Controller)とはどういった事か、図で簡単に書いてみました。

mvc


ユーザーが画面を表示する例で見てみます。

① User —>  ② Controller —>  ③ View  —>  ④ User

 

       ①Userは見たい画面をControllerへリクエストします。

                  

       ②ControllerではUserのリクエストに応じ、Viewを呼びます。

                  

       ③ViewはControllerのリクエストに応え、適切な結果を返します。

                  

       ④Userは、③の結果をレスポンスとして画面を確認します。

それでは、フォームを作る場合の流れを追っていきたいと思います。

ここでは、入力画面 –> 確認画面 –>  完了画面と遷移する場合で描いてみます。


[入力画面 ]

入力フォームを表示させるまでの流れですが、基本的に前回と同じです。
※ただし、DB接続などの記述はModelとして扱う事が一般的なので、の前にContorllerとModelのやり取りが発生します。

初回アクセス時、コントローラーから、ビューを、テンプレートとして読み込みます。
よってコントローラーには、htmlファイルをテンプレートとして読み込む記述が必要です

読み込み後はフォーム入力画面が生成され、フォーム内にユーザーが、名前やアドレスなど、入力を行い、確認ボタン等を押下し、確認画面へ、遷移します。
form


[確認画面 ]

この時(確認ボタン押下)、の流れもやはり、コントローラーがユーザーのリクエストを受け取り
必要な処理を行います。必要な処理は主に
ユーザの入力値をチェック確認画面の表示入力画面から遷移してきたか、などたくさんありますが、今回は
割愛します。
コントローラーが必要な処理を完了した後、確認画面のテンプレートを呼び出します。

confirm
ユーザーが入力した値が反映され確認画面として表示されています。

今回は確認画面までとなりますが、次回は確認画面から図を交えて更新して行きたいと思います。

 

keny

 

 



新人奮闘記4

今回は、再帰関数を用いて素因数分解をするプログラムを作成してみました。

素因数分解と突然言われると、懐かしかったり、どうだったかな?という事で簡単に計算例だけ紹介しておきます。

素因数分解は自然数を素数の積で表します。

72 ,120をそれぞれ素因数分解すると

soinsu

のようになります。

今回は、与えられた自然数を2^3 × 3^2のようにハット記号で表すプログラムを書いていきます。

さっそく再帰関数を用いたコードを書いてみました。

soinsu1

 

     $x:素数の初期値    $n:今回のターゲット   $c:累乗の値x^c

5行目で関数をコールします。

8行目にて、xがnより大きい時、この関数は終了します。

9~15行目で、実際の計算を行っています。

16行目にて、自分自身をコールしていますが、この時1を加算してコールしています。

これにより、8行目で、関数は終了する事ができます。

7,8,16行目だけ見るとfor文と似た動きである事がわかります。

[基本的なfor文の動作]

初期化->条件式->ステートメント->インクリメント->条件式->ステートメント

loop_ex

[prime_Fact()の動作]

初期化->条件式->ステートメント->インクリメント->初期化->条件式

再帰呼び出しする時、$x+1,もしくは呼び出し以前に$xを変化させなければ無限ループになってしまう事に注意が必要です。

この条件式と再帰呼び出しの間がn回実行される処理という事になります。

[実行結果]

soinsu_ke

結果は予定通りですが…

いまいち納得がいきません!

上記コードだと、for文の代わりに関数を使って、関数内部(15行目)でechoを使って出力しています。

5行目にprim_Fact()を実行した場所で出力したいのです。つまり、実行結果を丸ごと返り値としてreturnして関数外部で使いたい。

これを解決しようとした時にハマりました。

それでは単純に関数内部で、結果文字列を貯めこんで、return しちゃえばいいんじゃないの?

という事で

14行目で最初の一度だけ$resを初期化

15行目にて連結を繰り返す。

7行目のreturnで貯め込んだ文字列$resを返す。

4行目にて、返り値を確認しています

コード

noticeres

 

[実行結果]

saikinotice_k

見ての通り$resは未定義扱い、おまけにNULLでreturnされていない事がわかります。

繰り返しの中で最後に一度だけ、return されているはずなのに、、、

そこで、returnはどこに何を返すのか、改めて考えていると、大きな勘違いをしている事に

気がつきました。returnは「呼び出し元へ値を返す」事はわかっていたつもりでした。

上記のコードは、7行目でreturnした値は,4行目に返る事を期待したコードです。

しかし、NULLという結果になっているという事は、4行目の関数には返っていません。

では、7行目のreturnはどこへ返っているのでしょうか。

結論から言うと、16行目のprime_Fact()へ返っていました。

動作を図へ示します。

 

saikizu

 

いままでは、シンプルに6行目から16行目を単に繰り返していると考えてました。

上図のように全く同じ関数ではないと考えると、ロジックは変化し、コードも変化します。

図を踏まえた上でもう一度コードを書きなしてみようと思います。

saikicode_f

[実行結果]

soinsu_ke

14行目で$strに最初の素因数分解の結果2^3が格納され、それを引数にして、次のprime_Fact()へ値を渡しています。

これを繰り返し、7行目のreturnが実行された時、一つ前の関数(呼び出し元)へ15行目へ値が返ります。

最終的に初めて関数をコールした場所(5行目)へ値が返ってくるという仕組みです。

以上、細かな例外処理は、割愛させていただきますが、再帰関数に頼る時には、役にたてばと思います。

 

keny

 




アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム