WebプログラミングU PHP

 目次へ 前へ 次へ

2008/5/13 久米

1.2 PHPの基礎(2)

1.2.1制御文字

    使用例
改行 \n
<textarea name="" cols="80" rows="20"> 
    <?php
        print "おはようございます。\n";
        print "ごきげんいかがですか?"."\n";
        $a="ではまた\n\n";
        print $a;
    ?>
</textarea> 
CR \r  
タブ \t
<textarea name="" cols="80" rows="10"> 
    <?php print "\t\t2004年4月13日";?>
</textarea>
    備考
\をまれに表示したい時 \\

\は単独では制御文字になるため。

"をどうしても使いたい時 \"

'を使った方がプログラム可読性がよい。

1.2.2配列

    使用例 主にfor文の中で使う
配列 $a[0]=10;
$a[1]=24;

$b[0]="おはよう";
<?php
    $a[0]=10;
    $a[1]=24;
    $gokei=0;
    for($i=0;$i<count($a);$i++){
        $gokei=$gokei+$a[$i];
    }
?>
連想配列 $a["学籍番号"]="AW010";
$a["名前"]="日電太郎";
 
多次元配列 $a[0][0]=10;
$a[0][1]=24;
$a[0][2]=13;
$a[1][0]=51;
 

 

1.2.3関数

※エラー制御演算子@を関数の前につけると、その関数でエラーがでてもエラーメッセージをカットできる。

※PHPマニュアル関数説明の表示の意味するところ

 string date ( string format [, int timestamp])

string date ( string format [ , int timestamp ] )

戻り値の型
(voidは戻り値
無しの意味)

関数名   引数の型と
その意味
オプション
だよの意味
オプション引数の型と
その意味
 

よく使う関数

      使用例(<?php ?>は省略)
数学関数 round 四捨五入 $a=3.14;
$b=round($a);
  rand 乱数発生 $a=rand(0,9);//0〜9までの整数の乱数
日付時刻 date 日付取得
(第2引数がない場合
は現在日時)
$a=date("Y");
//とか
print date("Y/m/d");
  strtotime 日付の加減などに使用 $a=date("Y/m/d", strtotime("-2 day")) ;
//現在から2日前
文字列 strlen
mb_strlen
文字列の長さ
mb関数は日本語対応
$a="nichiden taro";
$b=strlen($a);
  trim 文字列の前後から
空白を取り除く
$a=" 富士 太郎 ";
$b=trim($a);
//ユーザ入力で前後に空白が入っているのを削除するなど
  strpos
mb_strpos
指定した文字列の位置
1文字目は0
$a="nichiden taro";
$b=strpos($a, " ");
  substr
mb_substr
部分文字列の切り出し
strposなどと組み合わせ
$c=substr($a, 0, $b);//1文字目から$b文字分切り出し
$d=substr($a, $b+1);//$b+2文字目から最後まで切り出し
  strcmp 文字列の比較 $a="123";
$b="123";
$c=strcmp($a, "124");//-1が返る
$d=strcmp($a, $b);//0が返る
  str_replace
ereg_replace
文字列の置き換え
ereg関数は正規表現可
$a=ファイルやDBから読み込んだもの;
$b=str_replace("\r\n", "<br>", $a);//HTMLで表示
  strtolower 小文字に変換 $a="Nichiden Taro";//DBから読み取った文字
$b="nichiden taro"//ログイン入力された文字
if(strtolower($a)==strtolower($b)) 正常処理;
  split 区切り文字で分割し
配列として返す
$a="2004/4/13 taro 東京都 20";
$b=split(" ", $a);
print "日付:".$b[0];
print "名前:".$b[1];
  strtok 区切り文字で分割し
文字列として
1つ毎に返す
$a="This is an example string";
$b=strtok($a," ");
while($b!="") {
    print "単語=".$b."<br>";
    $b=strtok(" ");
}
変数処理 isset 変数に値が代入されて
いるか調べる
$a="あ";
if(isset($a)) print "代入されている";
else print "代入されていない";
ファイル処理 file_exists ファイルorディレクトリが
存在するか調べる
if (file_exists($a)) {
   print "ファイル存在します。";
}
  file ファイル全体を読み込み
1行毎に配列に格納
$a=file('http://www.google.co.jp/');
// 配列をループしてHTMLソースとして表示し、行番号もつける
for($i=0;$i<count($a);$i++) {
   print "<b>$i</b> : ".htmlspecialchars($a[$i])."<br>\n";
}
  fopen ファイルを開き
ファイルポインタを返す
$fp = fopen($a,"r");
while (!feof($fp)) {
    $buf = fgets($fp,4096);//一行読み出す
    print $buf"\n";
}
fclose($fp);
  fgets ファイルポインタから
1行取得する
 
  feof ファイルポインタがファイル
終端に達しているか?
 
  fclose ファイルポインタを
クローズする
 
  fwrite
fputs
ファイルポインタの個所へ
書き込む
・・・
$b="こんにちは\n";
fputs($fp, $b);
配列 array まとめて配列に代入 $a=array("新宿", "渋谷", "品川", "千駄ヶ谷");
  count 配列の要素数を返す $b=count($a);

 

演習1 今日の日付を、2008年5月13日 の形式で表示せよ。

演習2 表示するたびに変わる、さいころの数字を表示せよ。

演習3 午前中なら「おはようございます」午後なら「こんにちは」夜なら「こんばんは」
と表示するようにせよ。

演習4 表示するたびに変わる、さいころの数字の画像を表示せよ。
if文は使わず、配列を使用せよ。

以上のものを適当に自分のホームページに採用せよ。

 

1.2.4オリジナル関数

書式 使用例
function 関数名(引数,・・・){
    命令分;
    ・・・
    ・・・
    return 変数または値;
}
注意:呼び出す前に定義する
function gokei($a1, $a2, &a3){
    $g=$a1+$a2+$a3;
    return $g;
}

$a=gokei(10, 12, 18);
$b=gokei(20, 30, 40);
$c=gokei(10, 15, 20);
print $a."<br>".$b."<br>".$c;

※経験則:引数は上記のように値渡しだけを使った方ベター。
引数の前に&を付けた参照渡しという方法もあるが、引数の値を変更できてしまうので混乱の元。

 

1.2.5外部ファイル化

  外部ファイルの
読み込みエラー時
処理は継続中止?
外部ファイルの
読み込み回数は?
require("外部ファイル名");; 中止 毎回
include("外部ファイル名"); 続行 毎回
require_once("外部ファイル名"); 中止 1回
include_once("外部ファイル名"); 続行 1回

本文
<?php include_once("in_counter.php");?>
<html>
<head>
<meta httpequiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>わたしのホームページ</title>
</head>
<body>
<h1>わたしのホームページ</h1>
<h2>今日の出来事</h2>
<p>今日のPHPは良く分かった。(●^o^●)<br>
  春休みに勉強してみようっと。φ(。。;)m</p>
<p> </p>
<p><b><?php print $ct; ?></b>人目の訪問者です。</p>
人目の訪問者です。</p>
</body>
</html>
本文と同じディレクトリに
in_counter.php
を作って配置する

(外部ファイル化とは
関係ないけど同じ
ディレクトリにcounter.txt
も入っている)
<?php
//簡単アクセスカウンタ
$fp = fopen("counter.txt","r+");
$ct = fgets($fp, 64);
$ct++;
rewind($fp);
flock($fp, LOCK_EX);
fputs($fp, $ct);
fclose($fp);
?>

 

1.2.6オブジェクト指向PHP

参照

 

演習 カレンダーを作成してみよう

カレンダー