PHP入門に最適なサンプルコードをまとめています。
PHPとは
PHPはオープンソースの汎用スクリプト言語で、特にWeb開発に適しています。HTMLにロジックを埋め込むことができます。
参考)PHP: PHP とはなんでしょう? – Manual
データベースとの親和性も高く、特にLAMPと略される「Linux、Apache、MySQL、PHP」の組み合わせで構築されたシステムは実績多数です。
【関連記事】
▶PHPでデータベース(MySQL)に接続する方法
ただし、HTMLにコードを埋め込まれたPHPロジックを修正することで、デザインが崩れてしまうことがあります。そのため、大きなシステムではテンプレートエンジンなどを使ってデザイン部分とPHPのロジック部分を分離して管理するケースもあります。
PHP入門 コピペで実行できるサンプルコード集
PHPのサンプルコードを実行してみましょう。以下のコードは、変数$aに”Hello”、$bに”world”を代入して、echo文で表示するサンプルです。
<html><body> This is test. <?php $a="Hello"; $b="world"; echo "$a, $b"; ?> </body></html>
「<?php」と、「?>」で囲んだ部分がphpコードとして解釈されます。それ以外はHTMLとして扱われます。
phpが動作する環境を構築するには、最低限でもウェブサーバサービスと、phpモジュールをインストールする必要があります。ここでは、オンラインでphpコードの実行をシミュレートできるサイトを使って、サンプルコードをコピペして実行してみましょう。
Online PHP editor | output for 3uQEn
上記のページを開き、サンプルコードをコピペしてeval()ボタンをクリックします。必要に応じてプルダウンメニューでPHPのバージョンを指定することができます。
コピペしたコードは、自動的に公開されるため、業務用のコードなど機密性の高い情報は使用してはいけません。あくまで簡易的な学習用として使用しましょう。
実行すると、以下が表示されます。
PHPでは、改行の区切り文字に;(セミコロン)を記述します。echoは、文字列を表示するための命令で、ダブルクォーテーション内に変数を指定することが可能です。
<?php ~ ?> 以外の行は、HTMLとしてそのまま表示されます。
なお、実際にサーバに配置する際には、ファイル名の拡張子は.phpとする必要があります。
四則演算の結果を、printfでフォーマットして出力する
四則演算と剰余の結果を表示するサンプルコードです。
<?php printf( "3*4=%d\n", 3*4); //乗算 printf( "8/2=%d\n", 8/2); //除算 printf( "1+5=%d\n", 1+5); //加算 printf( "7-3=%d\n", 7-3); //減算 printf( "10%%3=%d\n", 10%3); //剰余 ?>
実行するとこうなります。
3*4=12 8/2=4 1+5=6 7-3=4 10%3=1
printfは、フォーマット文字列(第一引数)に従って、数値、文字列、変数を表示する関数です。フォーマット文字列内で%を表示するには、%%と記述します。
また、\nは改行をあらわします。
文字列の操作 連結と、sprintfによる整形、<br>タグの付加
<?php $a="Hello"; $b="world"; $c=$a.$b; printf("%s+%s=%s\n", $a, $b, $c); $d=sprintf("%s, %s", $a, $b); printf("%s\n", $d); $e=nl2br( sprintf("%s\n",$d) ); printf("%s\n",$e) ?>
実行するとこうなります。
Hello+world=Helloworld Hello, world Hello, world<br />
文字列同士を連結するには、「.」(ドット)演算子を使用します。
$c=$a.$b という表現は、$aと$bを連結した結果を$cに代入するという意味になるんですね。同様に、以下の表現も可能です。
- $c=”abc”.$a;
- $c=”abc”.”def”;
- $c=”a”.”b”.”c”.”d”;
sprintfは、第一引数のフォーマット文字列に、変数や値を当てはめる関数です。また、nl2brは文字列中の\n(改行)を<br />に変更する関数です。
配列 array()で初期化 連想配列の初期化には=>を使用
PHPでは、a[0]、var[31]のような指定のほか、a[‘col1’],dat[‘para’]のようにカッコ内の添字指定に文字列を指定できる連想配列の使用が可能です。
<?php $array=array(1,2,3,4,5); printf( "\$array[0]=%s\n", $array[0]); printf( "\$array[1]=%s\n", $array[1]); printf( "\$array[2]=%s\n", $array[2]); $array2=array('abc',1,2+3); printf( "\$array2[0]=%s\n", $array2[0]); printf( "\$array2[1]=%s\n", $array2[1]); printf( "\$array2[2]=%s\n", $array2[2]); $array3=array('hello'=>'world', 'apple'=>'りんご', 'police'=>110); printf( "\$array3['hello']=%s\n", $array3['hello']); printf( "\$array3['apple']=%s\n", $array3['apple']); printf( "\$array3['police']=%s\n", $array3['police']); $array3['test']="テスト"; var_dump($array3); ?>
実行するとこうなります。
$array[0]=1 $array[1]=2 $array[2]=3 $array2[0]=abc $array2[1]=1 $array2[2]=5 $array3['hello']=world $array3['apple']=りんご $array3['police']=110 array(4) { ["hello"]=> string(5) "world" ["apple"]=> string(9) "りんご" ["police"]=> int(110) ["test"]=> string(9) "テスト" }
array()を使用することで、配列の初期化ができます。単に$a=array()と指定すると、空の配列になります。
$array2のように、配列には文字列、数値の混在が可能です。array()内で計算式や文字列操作関数を使用することもできます。
$array3は連想配列の例です。「=>」を使って連想配列の初期化をおこないます。連想配列に追加を行うには、単に$array3[‘test’]=”テスト”; のように記述することで可能となります。
var_dump()は、変数や配列の中身を出力する関数です。デバッグ用の情報を出力するのに最適です。なお、ウェブサーバ経由で出力を見ると、改行部分がくっついて表示されるため、以下のように<pre>というHTMLタグで囲んで改行をそのまま表示すると見やすくなります。
print "<pre>"; var_dump($array3); print "</pre>"
printは、指定した文字列を表示します。
ループ(foreach) asの後の引数に&をつけると、参照渡しになる
<?php //$array[0]~$array[5]までループ $array=array(0,1,2,3,4,5); foreach( $array as $val ){ print $val."\n"; } //配列の書き換えができない foreach( $array as $val ){ $val=0; } var_dump($array); //&をつけると、参照先の配列書き換えが可能 foreach( $array as &$val ){ $val=0; } var_dump($array); ?>
実行すると、こうなります。
0 1 2 3 4 5 array(6) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) } array(6) { [0]=> int(0) [1]=> int(0) [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> &int(0) }
foreach($array as $val)とすると、配列$arrayの内容をループしながら順番に$valに代入して処理をおこないます。
このとき、$valに対して値を代入しても、配列$arrayには影響はありません。しかし、foreach($array as &$val)というふうに$valの前に&(アンパッサンド)をつけることで、「参照渡し」となり、$valはarrayの格納先の実体を指すことになります。そのため、$valを書き換えると、配列の内容が書き換わります。
if文 ループ中での条件分岐
配列$arrayをループしながら、配列の値を表示し、if文で値を判定して値によって異なるメッセージを表示するサンプルコードです。
<?php $array=array(0,5,8); foreach( $array as $val){ printf( "値は、%dです。\n",$val); if( $val > 5 ){ print "5より大きいです\n"; } else { print "5以下です\n"; } } ?>
実行するとこうなります。
値は、0です。 5以下です 値は、5です。 5以下です 値は、8です。 5より大きいです
elseifを用いることで、分岐条件を追加していくことが可能です。
コメント // は、phpタグ内でだけ有効 複数行コメントは、/* */で囲む
PHPでは、//をつけると行末までコメント扱いになり実行されません。<?php ~ ?>タグ外ではHTMLとして解釈されるため、//をつけてもそのまま表示されます。
//phpタグ外では無効 <!-- HTMLタグ内でのコメント記述はこうする --> <?php print "STEP1\n"; //print "STEP2\n"; print "STEP3\n"; /* print "STEP4\n"; 複数行のコメント print "STEP5\n"; */ ?>
実行するとこうなります。
//phpタグ外では無効 <!-- HTMLタグ内でのコメント記述はこうする --> STEP1 STEP3
phpタグ内の、//をつけた行と、/* ~ */で囲んだ行は実行されませんでした。ソースコードを見やすくする目的のほか、デバッグで一時的に処理を無効化するときなどに使えます。
なお、HTMLで表示させない(コメント化)するには、<!– ~ –>で対象箇所を囲います。
日付の操作 昨日、明日、一週間後の日付を計算する方法
<?php //現在の日付と時間 $d=date("Y-m-d H:i:s"); printf("現在、%s\n",$d); //明日、昨日、一週間後の日付を計算 $today=date("Y年m月d日"); $tomorrow=date("Y年m月d日",strtotime("1 day")); $yesterday=date("Y年m月d日",strtotime("-1 day")); $afterweek=date("Y年m月d日",strtotime("1 week")); printf( "今日は%sです。\n", $today); printf( "明日は%sです。\n", $tomorrow); printf( "昨日は%sです。\n", $yesterday); printf( "一週間後は%sです。\n", $afterweek); //指定日の一ヶ月後の日付を計算 $anyday="2020-02-21"; $anyday_aftermonth=date("Y-m-d",strtotime('+1 month',strtotime($anyday))); printf( "%sの一ヶ月後は、%sです。\n",$anyday, $anyday_aftermonth); ?>
実行するとこうなります。
現在、2020-02-22 03:36:14 今日は2020年02月22日です。 明日は2020年02月23日です。 昨日は2020年02月21日です。 一週間後は2020年02月29日です。 2020-02-21の一ヶ月後は、2020-03-21です。
date()は、現在の日付を指定したフォーマットに従って文字列にする関数。strtotimeを組み合わせることで、1日後、1日前、1週間後などの日数計算が可能になります。
まとめ
- PHPはウェブ開発に適したプログラミング言語で、HTMLにコードを埋め込めるのが特徴。
- PHP入門には、オンラインでPHPコードを実行できるサイトを利用すると、インストールや設定作業が不要で簡単。
- コピペ可能なPHPコードを実行し、コードの変更と結果の変化を確認しながら学習すると効率が良い。
- PHPコードが実行可能なサイトでは、入力したコードが公開される可能性があるため、機密性の高いコードのコピペは避ける。