目次

php初歩の詳細

プログラムの書き方

文の最後にセミコロン(;)をつけます。セミコロンで区切れば1つの行の中に複数の文を記述できます(おすすめはしません)。

プログラム中に「#」が現れた場合、「#」から行末までをコメントとして扱います。(シェルスクリプト仕様)

プログラム中に「//」が現れた場合、「//」から行末までをコメントとして扱います。(C++言語仕様)

プログラムの中で「/*」が現れた場合、「*/」が現れるまでを全てコメントとして扱います。(C言語仕様)。

文字列

文字列をプログラムの中で記述する場合、シングルクオーテーション(')またはダブルクオーテーション(")で囲います。

'文字列'
"文字列"

ダブルクオーテーションで囲った場合は、エスケープシーケンスや変数展開が使えます。

変数展開

変数展開は次のように使います。(#以下は実行結果を示します)

$tanka = "120";
$kosuu = 25;
$soukei = $tanka * $kosuu; 
print  "$tanka × $kosuu = $soukei" ;  #120 × 25 = 3000 

さすがに以下はうまく行きませんが、

print  "$tanka × $kosuu = ($tanka * $kosuu)" ; #120 × 25 = (120 * 25)

こちらは可能です。

print  "$tanka × $kosuu = " . $tanka * $kosuu ;  #120 × 25 = 3000 

変数名が確定しないときは{ }が必要になります。

$mojii2 = "数値も文字列も";
print  "ダブルクォート内に書くと$mojii2変数の値を展開します。" ;  #ダブルクォート内に書くと

{ }を加えると、

print  "ダブルクォート内に書くと${mojii2}変数の値を展開します。" ;  #ダブルクォート内に書くと数値も文字列も変数の値を展開します。

エスケープシーケンス

改行など普通の文字で表せない文字を入れるときや、$のように特殊な意味を持った文字から特殊な意味を取り去って普通の文字として表示したい時に使います。

次のエスケープシーケンスはダブルクオーテーションで囲まれた文字列の場合にのみ使えます

ダブルクオーテーションで囲まれた文字列の中で、文字として「"」を記述したい場合は「"」の代わりに「\"」と記述するということです。

\n改行
\rキャリッジリターン
\tタブ
\\\文字
\$$文字
\(左括弧
\)右括弧
\[左括弧
\]右括弧
\'シングルクオーテーション
\"ダブルクオーテーション
\nnn8 進数表記
\xnn16 進数表記

シングルクオーテーションで囲まれた文字列の中でも次の2つだけは使えます。

\'シングルクオーテーション
\\\文字

ヒアドキュメント

複数行に渡る文字列を定義するのに便利な書き方です。任意の文字列をIDとして指定して「<<< ID」から「ID」の間に記述します。

<<< ID
文字列1
文字列2
文字列3
ID

「ID」は任意の文字列が指定できます。例えばIDとして「Document」とした場合は次のようになります。

$str = <<< EOD
文字列の例です。
IDは英数字およびアンダースコアのみからなり、英字またはアンダースコアで始まる必要があります。
終端 ID がある行はIDを単独で書きます。インデントしてはいけません。
EOD;

date関数の書式文字列

よく使うもの

文字説明例または値の範囲
Y年。4 桁の数字。例: 1999または2003
y年。2 桁の数字。例: 99 または 03
m月。数字。ゼロをつけて2桁。01 から 12
n月。数字。ゼロをつけない。1 から 12
M月。文字。3文字。Jan から Dec
F月。文字。フルスペル。January から December
d日。ゼロをつけて2桁。01 から 31
j日。ゼロをつけない。1 から 31
h時。12時制。ゼロをつけて2桁。01 から 12
H時。24時制。ゼロをつけて2桁。00 から 23
g時。12時制。ゼロを付けない。1 から 12
G時。24時制。ゼロを付けない。0 から 23
i分。ゼロをつけて2桁。00 から 59
s秒。ゼロをつけて2桁。00 から 59
a午前/午後(小文字)am または pm
A午前/午後(大文字)AM または PM
D曜日。3文字。Mon から Sun
l曜日。フルスペル。Sunday から Saturday
N曜日。数値。ISO-86011(月曜日)から 7(日曜日)
w曜日。数値。0(日曜)から 6(土曜)

その他

文字説明例または値の範囲
o年。ISO-8601形式。Yとほぼ同じ。例: 1999 あるいは 2003
L閏年であるかどうか。1なら閏年。0なら閏年ではない。
t指定した月の日数。28 から 31
S英語の序数を表すサフィックス。2文字。jと一緒に使用st, nd, rd または th。
z年間の通算日。数字。(ゼロから開始)0 から 365
WISO-8601 月曜日に始まる年単位の週番号例: 42 (年の第 42 週目)
eタイムゾーン識別子例: UTC, GMT, Atlantic/Azores
Oグリニッジ標準時(GMT)との時差例: +0200
Pグリニッジ標準時(GMT)との時差。時間:分。例: +02:00
Tタイムゾーンの略称例: EST, MDT ...
cISO 8601 日付例: 2004-02-12T15:19:21+00:00
rRFC 2822 日付例: Thu, 21 Dec 2000 16:01:07 +0200
BSwatch インターネット時間000 から 999
uマイクロ秒。date()では常に000000。DateTime::format()で対応。例: 654321
Iサマータイム中か否か1ならサマータイム中。 0ならそうではない。
Zタイムゾーンのオフセット秒数。 UTCの西側で負、東側で正。-43200 から 50400
UUnix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数time() も参照

タイムゾーン設定

// デフォルトのタイムゾーンを設定。PHP 5.1 以降
date_default_timezone_set('UTC');

mktime() の基本的な例

// 出力: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

// 出力例: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));

xhtmlの時の注意

ファイルの最初の行のxml宣言部を次のように書き換えます。

<?php print '<?xml version="1.0" encoding="UTF-8"?>' ?>

こうしておかないと、

Parse error: parse error, unexpected T_STRING in /srv/httpd/hoge/hoge.php on line 1

などのエラーがでてページが表示されないことがあります。

これは <? だけでphpプログラムとするやりかたもあり、php側が<?xmlをphpのプログラムと解釈してしまうからです。本当は<?のあとがphpかxmlかで棲み分けをしたはずなのですが。