24日目
今日はcakephpを使いつつ、for文とswitch文を使ってみました。
switch文は再びフォームと絡めてみました。
var_dump ( ) についても少し調べてきましたので書きます。
まずそのvar_dump ( )についてです。
var_dump( )は ( ) に入れたものをechoよりもより詳しく表示する構文です。
例えば
→var_dump ( ' fuga ' ) ;
”fuga” が何かで定義されている文字列である場合、ブラウザ上で string ( 4 ) と
表記されます。 string は文字列型という意味で、( 4 ) は文字列のバイト数を
示しています。
" fuga "は全てローマ字で 4 バイトの文字列なので ( 4 ) と表記されます。
var_dump('fuga') ;
→ string(4) "fuga"
→var_dump ( $a ) ;
$aという変数があった場合、$aの内容を表示させます。
var_dump($a) ;
→ array(3){
[0]=> array(2){
["drink"]=> array(1) { ["name"]=> string(4) "coke" }
["company"]=> array(1) { ["company"]=> string(9) "Coka Cola" } }
[1]=> array(2){
["drink"]=> array(1) { ["name"]=> string(6) "calpis" }
["company"]=> array(1) { ["company"]=> string(6) "Calpis" } }
[2]=> array(2){
["drink"]=> array(1) { ["name"]=> string(9) "Bireley`s" }
["company"]=> array(1) { ["company"]=> string(5) "Asahi" } }
}
色々なものに使えそうなので、これからもちょいちょい使ってみます。
PHPを学ぶ時、最初に憶えて欲しいvar_dump | Simple Colors
参考サイト
for文についてです。
forはforeachと同じく ( ) の中を繰り返し処理をする、という内容の文です。
例を書きます。
$color=array("red","bule","green","white","black");
for($i=0;$i<count($color);$i++){
echo $color[$i] ;
}
$color=array("red","bule","green","white","black");
$colorに対して配列を用意しました。
その下段を見て行きます。
for($i=0;$i<count($color);$i++){
まず for ( ) 内に $ i = 0 という定義をします。この$ i は任意で決めることができます。
; で区切り、$ i<count ( $color ) ;を定義します。
この$ i<count ( $color ) ; は$color内で配数に指定した要素の数を示します。
なので、今回は " 5 " となります。
例えば$color内の要素を一つだけ減らせば " 4 " になります。
なので、$ i<count ( $color ) ; = $i< 5 である事がわかると思います。
echo $color[ $ i ] ;
で $color の配列を表示します。一番最初であれば、答えは" red "ですね。
その後が$ i++ですね。
演算子 ++ を使用しています。これは ○ = ○ + 1 という事を示していますね。
なので、 $i = $i + 1 という事になります。
ここで、上から順に処理をしていかないのはおかしい!と思ったのですが。
もうそういうものだと割り切った方がいいようです。
そういう構文なんですw
という様に一連の処理を終えたので、$i<count ( $color )を満たすまで
繰り返し文を続けます。
これがfor文のフローです。
続いてswitch文です。
switch文は if文と同じく条件分岐をする文です。
switch ( 変数 ) の変数があれば、" case " 値と比較をして、値と合ったものを
実行します。
値には予め処理内容を記入しておき、breakを使用して式から抜け出します。
breakに達するまで処理を続けるので処理の複数指定が出来ます。
defaultはどの" case "値にも当てはまらなかった場合に行われます。
必要がなければ(caseに必ず当てはまるのであれば)記入する必要はありません。
例:
$pref = パン
switch($pref){
case '米':
print "和食";
break;
case 'パン':
print "洋食";
break;
case '麺':
ptint "中華?";
break;
default
break;
}
$prefは " パン "という文字列が入っています。
case " 米 "には当てはまらないので、print " 和食 " は表示されず処理は無視されます。
case " パン " が次に出てきて、値が一致するので print " 洋食 " を表示します。
その後に break して式を抜け出します。
例えばこれが $pref =" お菓子 "などであったらどの case にもあてはまらないので
defaultでbreakされるだけで、何も表示されません。
ここまでがswith文の説明でした。
今回はこのswitch文に+α フォームを加えて、フォームで選択された答えが
switch文のcase値になり、対応した答えが表示されるようにしてみました。
例:
if(isset($_POST['food'])){
$FFF=$_POST['food'];
switch($FFF){
case 'kome':
$talk="和食";
break;
case 'pan':
$talk="洋食";
break;
case 'men':
$talk="中華?";
break;
}
}
$this->set('food_view',$talk);
if ( isset ( $_POST['food'] ) ) { }
isset ( ) で ( ) の中に指定した変数が定義されていればTrueを、定義されていなければ
Falseを返します。
なので、$_POST['food']が定義されていればTrueを返し、なければFalseを返す、という事になります。
それにif文を応用すると、意味的には
"もし$_POST ['food'] が定義されていればif文の { } 内の処理を行う"ということになります。
$_POST [ ] というのはフォームにデータを引き渡す時の変数で、POSTとGETの二つがあります。
その二つの違いは先日も述べましたが、ctpファイルで<form>タグで指定したメソッド属性により変わります。 //詳細は話が変わりすぎるので割愛します。
ただ一点、$_POSTという形について述べていなかったのはこれは連想配列なんですね。
$_POST っていうのは[ 'food' ]なんだよーってことを配列を連想させる一文でした。
$FFF=$_POST [ 'food' ] ;
そのままの意味なのですが$FFFという変数は$_POST [ 'food' ] ; と一緒、ということですね。
そしてswitch文に入っていきます。
$FFFとcase値の内容が同じであれば処理を実行するようにしました。
この場合だとcase ' ' と$FFFが同じであれば$talkを定義するようにしました。
定義した後はbreakしてif文を抜け出します。
$this->set('food_view',$talk) ;
set文を使うと ( ) 内で指定したデータをViewに渡す事ができます。
set('food_view',$talk) ; というのは 'food_view' = $talk ということを示し、
そして ' food_view ' をViewに送る、ということになります。
$this->は、自身のオブジェクトの事を示しており、" -> "は " 実行する "という事を指す演算子なので形式的に覚えてしましました。
これで、最初に言ったフォームで何かを選択した時にそれに対応する答えが返ってくるようになりました。
forとforeachの違い!switchとifの違い!
そんな変わらないらしいです(笑
基本的な動きは一緒なのであえて、とか無理矢理いうなら...くらいです。
for ・・・一番基本的なループ文でただのループ文を書く時は楽。
foreach・・・連想配列などを表示させる時に向いている。
if ・・・ 簡単な条件分岐をする際に向いている。
switch ・・・可読性の高さや複数条件がある場合。
くらいの気持ちでとりあえず今はやっていようと思います。
もう少し細かいところをわかるようになったら追記します。