WebプログラミングU PHP

 目次へ 前へ 次へ

2015/4/1 久米

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
preg_replace
文字列の置き換え
preg関数は正規表現可
$a=ファイルやDBから読み込んだもの;
$b=str_replace("\r\n", "<br />", $a);//HTMLで表示
  strtolower 小文字に変換 $a="Nichiden Taro";//DBから読み取った文字
$b="nichiden taro"//ログイン入力された文字
if(strtolower($a)==strtolower($b)) 正常処理;
  explode 区切り文字で分割し
配列として返す
$a="2004/4/13 taro 東京都 20";
$b=explode(" ", $a);
bodyの中で
print "日付:".$b[0];
print "名前:".$b[1];
  strtok 区切り文字で分割し
文字列として
1つ毎に返す
$a="This is an example string";
$b=strtok($a," ");
$c="";
while($b!="") { $c.= "単語=".$b."<br />"; $b=strtok(" "); } bodyの中で print $c;
変数処理 isset 変数に値が代入されて
いるか調べる
$a="あ";
$c="";
if(isset($a)) $c="代入されている";
else $c="代入されていない";
bodyの中で
print $c;
ファイル処理 file_exists ファイルorディレクトリが
存在するか調べる
$m="";
if (file_exists($a)) {
   $m="ファイル存在します。";
}
bodyの中で
print $m;
  file ファイル全体を読み込み
1行毎に配列に格納
$a=file('http://www.google.co.jp/');
// 配列をループしてHTMLソースとして表示し、行番号もつける
$m=""; for($i=0;$i<count($a);$i++) { $m.= "<b>$i</b> : ".htmlspecialchars($a[$i])."<br />\n"; } bodyの中で print $m;
  fopen ファイルを開き
ファイルポインタを返す
$fp = fopen($a,"r");
$m=""; while (!feof($fp)) { $buf = fgets($fp,4096);//一行読み出す $m.= $buf."<br />"; } fclose($fp); bodyの中で print $m;
  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);

bodyの中で
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

参照

 

 

コラム 連想配列の=>

連想配列や自分でキーを割り振りたい場合には「 => 」という記号を使います。
<?php
$fruit = array(
"apple" => "りんご",
"orange" => "オレンジ",
"grape" => "ぶどう",
);
?>

改行しているのは見やすくするためです。必要なければ1行で書いても構いません。

上記の例は以下のように書くのと同じです。
<?php
$fruit["apple"] = "りんご";
$fruit["orange"] = "オレンジ";
$fruit["grape"] = "ぶどう";
?>
多次元配列

多次元配列を作成したい場合はarray()関数をネスト(入れ子)します。

ややこしいですが、実際にサンプルを見た方が分かりやすいです。
<?php
$food = array(
"vegetable" => array(
"carrot" => "にんじん",
"tomato" => "トマト",
"onion" => "たまねぎ"
), //カンマ「,」で区切る
"fruit" => array(
"apple" => "りんご",
"orange" => "オレンジ",
"grape" => "ぶどう"
)
); //終了のセミコロン「;」
?>

これは以下のように書くのと同様です。
<?php
$food["vegetable"]["carrot"] = "にんじん";
$food["vegetable"]["tomato"] = "トマト";
$food["vegetable"]["onion"] = "たまねぎ";

$food["fruit"]["apple"] = "りんご";
$food["fruit"]["orange"] = "オレンジ";
$food["fruit"]["grape"] = "ぶどう";
?>