カテゴリー : 制御・関数

if文その2

if文は入れ子にすることもできます。

ループ文と合わせる事ももちろんできます。

IFで条件判定をしてtrueの時にループ処理。
ループ処理をしている中で、IFでの条件判定。
などなど

論理演算子

演算子 名前 結果
and 論理積 $a and $b $aと$bが共にTRUEのときはTRUE
or 論理和 $a or $b $aまたは$bのどちらかがTRUEのときはTRUE
xor 排他的論理和 $a xor$b 両方の結果が異なればTRUE(どちらかがTRUEでどちらかがFALSE)
! 否定 !$a $aがTRUEでないときはTRUE
&& 論理積 $a && $b $aと$bが共にTRUEのときはTRUE
|| 論理和 $a || $b $aまたは$bのどちらかがTRUEのときはTRUE

例1

例2

* gettype()関数は変数のデータ型を調べられます。

例3

演算子には優先順位があります → PHPマニュアル

例3の場合、論理和(||)と論理積(&&)をそれぞれ評価した後に論理積での評価をしたいので、それぞにれ括弧をつけています。

IF練習問題2

問題1

  • $yearという変数をつくり 西暦を代入してください (例 $year = 2013)
  • 閏年を判定するプログラムを作成してください。
    • うるう年は、4年に1回ありますが、100で割り切れる年はうるう年ではありません。また400で割り切れる年はうるう年になります。

問題2

  • 現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。
    • xamppのタイムゾーンを日本にあわせる
      • C:\xampp\php\php.ini の中のdate.timezone を探して、値を date.timezone = Asia/Tokyo に変更してからapach再起動してください。
    • 時刻を取得する関数は date(” H:i:s”)関数

 

if練習問題 パンくずリストをつくろう!

見本→

パンくずリストを作りましょう!!

  • 以前制作したnuv_list.phpから配列部分を抜き出して、nuv_array.phpを作っておくと、URLのパスが複数箇所で使用できるので便利です。
  • breadcrumb.phpを作成してheader.phpに読み込ませておくとファイルの可読性や保守性に有利です。
  • インクルードさせるには、複数回使用しますし、インクルード元で処理がエラー起きたときに処理をとめてほしいので、requireを使うとよいでしょう。
  • 現在アクセスしているURLを取得するには$_SERVER["REQUEST_URI"]を使うと取得できます。

 

要件

  • 現在閲覧しているページに対してはパンくずのリンクを生成しない。
  • TOPページからスタートする階層表現とする。(フォルダ内の階層はindedxもfirstもsecondも並列でかまいません)

break

breakは、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了します。

制御練習問題

問題1 => 以下をphpで作成してください。
ヒント:連想配列
foreach文 foreach(配列 as $key => $value){ 繰り返し処理 }

イチゴ:300円
バナナ:100円
オレンジ:200円
マンゴー:500円

問題 2 => 1から50までの数字を表示させてください。
 ただし、3の倍数のみ「aho」と表示させてください。

1 2 aho 4 5 aho 7 8 aho 10 11 aho 13 14 aho 16 17 aho・・・
こんな感じで!

PHPマニュアルの関数リファレンスの読み方

PHPにはいろんな関数があります。それを調べるのに便利なPHPマニュアルというものが存在します。

ここには、PHPの関数の使い方説明が書いてあります。

たとえば

explode

という関数を調べた場合 →リンク

 

array explode ( string $delimiter , string $string [, int $limit ] )
文字列の配列を返します。この配列の各要素は、 string を文字列 delimiter で区切った部分文字列となります。

と書かれています。

この読み方を理解すると、関数リファレンスを読むことが楽になりますよ。

たとえば、上の例だと

  • array === 配列の戻り値を返します。
  • explode === 関数の名前
  • string $delimiter === 第一引数はデリミタを渡してください。
  • string $string  === 第2引数は、文字列を渡してください。
  •  [, int $limit] === 大カッコで囲われている物は、オプションです。今の場合は整数の数字を渡してください。

というように、関数の戻り値のデータ型と引数のデータ型などが記載されています。

こことかここを参考にわかる関数でもPHPマニュアルを見て読み方を理解してください。

関数練習問題(文字列関数)

下記の問題を解いてください。

  1. 有限会社タイテック・4Standard・C_room 左記の文字列から有限会社タイテックと4StandardとC_roomをそれぞれ別の変数に格納してください。 →ヒント mb_substr()
  2. 有限会社タイテック・4Standard・C_room 左記の文字列からC_roomをA_roomに置換してください。 → ヒント str_replace()
    1. できる方は、オプションの引数&cntを渡して、何個置換したかを表示してください。
  3. http://127.0.0.1/php_p/second.php 左記のURLの文字列を / を区切り文字として、配列型の変数に格納してください。→ ヒント explode()
    1. できる方はArray ( [0] => http: [1] => [2] => 127.0.0.1 [3] => php_p/second.php ) このような実行結果になるようにしてください。
  4. 2013  , 8 ,5という3つの文字列をそれぞれ変数に格納した後、2013年08月05日という文字列に整形してください。→ヒント printf()
  5. さっぽろしシロイシクキタゴウ3ジョウ5チョウメ という文字列があります。 全て半角カナになるように変換してください →ヒント mb_convert_kana()
  6. 問題5で回答した文字列をEUC_JPに変換してください→ ヒント mb_convert_encoding() これの実行結果の確認は、ブラウザのエンコーディング設定を変更してください。
  7. $year = 2013  $month = 8; $day = 5; の3つの変数と IF文判定用の配列型変数 $lang=arrey(en,ja); $kana(zenkaku,hankaku); があります 以下の問題はこれを利用します。
    •  $lang[0]、$kana[0]の場合は
      • AUG 05 2013 と全角表示
    •   $lang[1]、$kana[0]の場合は
      • 2013年 5月 13日 と全角表示
    •  $lang[0]、$kana[1]の場合は
      • AUG 05 2013 と半角表示
    • $lang[1]、$kana[1]の場合は
      • 2013年 5月 13日 と半角表示
    • となるようなプログラムを作成してください →printf() , mb_convert_kana(), 他にも使ええる関数あるかもしれませんので、工夫してください。

関数練習問題(配列)

  1. $data_1 = array(“PHP”,”図書館”,”のサンプルです”); $data_2 = array(“配列”,”同士を”,”結合します”);  という二つの配列型変数があります。これを結合して、ひとつの文字列にしてください。 ヒント → array_merge() , implode()
  2. 以前使用した$_SERVER[‘REQUEST_URI‘]で取得した文字列を文字列をexplode()関数で/で区切りファイル名のみを取得してください。 ヒント→array_slice()
  3. $data = (array(‘tenis’,'swimming’,'soccer’,'baseball)); という配列型の変数があります。 配列の要素をABC順で並び変えてください。実行結果 Array ( [0] => baseball [1] => soccer [2] => swimming [3] => tenis ) →ヒント sort()

ユーザー定義関数その1

前回のサンプルファイルで使用されている関数htmlspecialchars()ですが、関数名が長くて間違えの元となりそうですね。非常に使う関数なのですが、長いのが難点です。

たとえば、これをe()という関数名にできたら楽だとはおもませんか?

それをやってみましょう!そのためには、ユーザー定義関数を作るのです!

その前に、check_inquiry.php ファイルの$title = htmlspecialchars($_POST['title'], ENT_QUOTES);をコメントアウトして、$title = $_POST['title']; に書き換えてください。その後、お問い合わせページのお問い合わせタイトルに下記のコードを入力してお問い合わせボタンを押してみてください。

どうなりましたか?
このようにサニタイズを行わなければ、サイトに対して第三者からいろいろな攻撃が可能になるのです。
それを防ぐためのhtmlspecialchars()関数なのです。

では、check_inquiry.phpファイルを元に戻しておいてください。

次にfunctions.phpファイルを新たに作成しておきましょう。
そこに、下記コードを書いてください。

そして、header.phpにfunctions.phpをrequireさせてください。
これで、htmlspecialchars関数を使用する場合は、e()でつかえるようになります。
ためしにcheck_inquiry.phpで動作確認を行ってみてください。

解説======

ユーザー定義関数を作っています。

function = ユーザー定義関数を作成する場合の命令文

e = ユーザー定義関数の名前(好きな名前)

() = 引数設定

  • 今回の場合は、引数に渡されるものは、第一引数$str(名前は任意)=文字列
  • 第2引数 オプション扱い(デフォルトで値を設定していますので、呼び出し元で引数を渡さなくても、$charsetの値はUTF-8になっています。)

処理の中身 =htmlspecialchars()関数を使用

  • 第一引数にe関数に渡された引数の$strを渡しています。
  • 第2引数は、ENT_QUOTESを設定、
  • 第3引数は、charsetを渡しています。
  • 参考 htmlspecialchars()マニュアル→

今回は、htmlspecialchars()を楽に使おうという目的のもとにユーザー定義関数の基本ヲ学習しましtら

POINT!==

  • ユーザー定義関数を作る場合にはfunction命令を使う。
  • ユーザー定義関数の名前は好きに決めれる。
  • 引数の数や、データ型も好きに決めれる。
  • 引数にデフォルト値を設定することで、オプション設定を作れる。