WordPressなど様々なウェブアプリケーションで使用されているPHP。 ウェブサイトの制作だけでなく、テキストの変換などちょっとした処理にも有用。 ここでは数多ある関数を1つ1つ紹介するのではなく、PHPの基本的な言語仕様や機能について簡単にまとめた。
昨今WordPressのおかげか、レンタルサーバーには新しいバージョンのPHPが比較的早く追加される。
<?php から ?> の間にコードを書く。 文末にはセミコロン(;)を書く。 ファイルの拡張子は通常「.php」。 たいていのレンタルサーバーで動作する。
<?php echo "テスト\n"; print 'test'; ?>
文字などを出力する方法はいろいろあるが、echoがよく使われる。 クオートはシングル(')でもダブル(")でもよい。 ダブルだと改行コード「\n」などが反映されるが、シングルだとそのまま文字列として表示される。
コメントの書き方はC言語やJavaなどと同じ。
//1行コメント /* 複数行にわたるコメント */
exit でプログラムを途中で強制終了(中断)させることができる。
<?php exit; ?>
変数は頭に$(ドル)マークを付ける。 小文字で、アンダースコア(_)でつなげるスネークケースが多い模様。
定数はdefineで定義する。 $マークは付けない。 大文字が多い模様。
$test = 'テスト'; define('SITE_DOMAIN', 'example.jp');
__FILE__、__DIR__ など予め定義されている変数もある。
echo __FILE__; echo __DIR__;
サーバーの環境変数なども取得できる。 $_SERVER という配列に入っている。
print_r($_SERVER);
必要な変数を個別に取り出すことも可能。 例えばウェブブラウザのユーザーエージェントは以下のように取り出せる。
echo $_SERVER['HTTP_USER_AGENT'];
その他以下のような環境変数が取得できる。 ただし、環境(サーバー)によっては取得できない場合もあるので、上記のように print_r($_SERVER) で確認した方がよい。
キー | 内容 |
HTTP_USER_AGENT | ユーザエージェント |
REMOTE_ADDR | リモートIPアドレス |
REMOTE_HOST | リモートホスト名 |
HTTP_REFERER | 参照元URL |
SCRIPT_NAME | スクリプトのパス |
PHP_SELF | スクリプトのパス |
REQUEST_URI | スクリプトのパス |
現在使用しているPHPの情報は phpinfo() などで確認できる。
//PHPの情報 echo phpinfo(); //PHPのバージョン echo phpversion(); //モジュールがロードされているか確認。ロードされているなら戻り値1。 echo extension_loaded('gd');
<<<「識別文字列」から「識別文字列」までをテキストとして扱う。 以下は EOD が識別文字列で、文字列は何でもよい。 Perl のヒアドキュメントと書式が異なる。
$test = <<<EOD サンプル テスト EOD; $a = array(<<<EOD テスト EOD, 10 );
PHPから別のPHPファイルを読み込んで使用することができる。 include、require、include_once、require_once などを使用する。 onceが付いているものは、既に読み込まれている場合は読み込まない。
require は読み込んだファイルに何かしらエラーがある場合、処理はそこで中断する。 一方 include は処理を続行する。 括弧はあってもなくてもよい。
include './example.php'; require './test.php'; require('./test/abc.php');
他のプログラミング言語と同様な数値の計算、四則演算など可能。
$a = 10; $b = 3; $c = $a + $b; $d = $a - $b; $e = $a * $b; $f = $a / $b; $g = $a % $b;
上述のようにクオートはシングル(')でもダブル(")でもよい。 ダブルだと改行コード「\n」などが反映されるが、シングルだとそのまま文字列として表示される。
文字列の連結はピリオド(.)で行う。 「.=」で既存の文字列に別の文字列を追加できる。
$a = 'テスト'; $b = "test"; $c = $a . $b; $d = '東京' . '神奈川'; $d .= 'サンプル';
array() で配列を作成。 キーと値をセットにした連想配列(ハッシュ)も作成できる。 配列の構造を確認したい場合は、print_r() や var_dump() が便利。
配列の値はカンマ(,)で区切る。 他のプログラミング言語では配列の最後の値の後ろにカンマを書くとエラーになるものもあるが、PHPでは書いていても問題ない。
$a = array(); $b = array('東京', '新宿', '渋谷'); $c = array('a' => 'test', 'b' => 'テスト', 'c' => 'サンプル'); echo $b[0]; print_r($b); var_dump($c);
配列に配列を入れて多次元配列を作成できる。
$a = array( array('東京', '新宿', '渋谷'), array('神奈川', '横浜', '川崎') ); echo $a[1][1]; print_r($a);
if文などの書き方は、基本的に他のプログラミング言語と似ている。
elseif は else if(スペースあり)と書くこともできる。
if($i < 10){ }elseif($i >= 10){ }else{ }
if文は以下のような書き方もできる。 HTMLなど文章が中心のコード内で条件分岐したい場合などに有用。
<?php if($mode == 'test'): ?> HTMLなどのテキスト <?php endif; ?>
for文による繰り返し(ループ)処理。
for($i=0;$i<10;$i++){ }
whileによる繰り返し処理。
while($i < 10){ }
do{ }while($j < 10);
switch は、変数の値に応じて複数の条件を列挙したい場合に便利。
switch($i){ case 0: str = "A"; break; case 1: str = "B"; break; case 2: str = "C"; break; case 'テスト': str = "文字"; break; default: str = "E"; }
配列を繰り返し処理する場合は foreach を使うことが多い。 配列のキーと値を取得できる。 以下の例では $key にキー、$value に値が入る。 キーと値の変数名は何でも良い。
$test = array('a', 'b', 'c'); foreach($test as $value){ } foreach($test as $key => $value){ }
break は強制的にループを途中で終了させる。 処理はそのループなどの外へ続く。 break 2 とすると2つ外のループまで出ることができる。
continue は強制的にループの最初に戻る。 プログラミング言語によっては continue と同じ動作に next が使われるものもあるので間違えないように注意。 continue 2 とすると2つ外のループの最初まで戻る。
for($i=0;$i<10000;$i++){ if($a == 'example'){ continue; } if($a == 'test'){ break; } }
PHPでは他のプログラム言語と同様、関数を定義できる。 同じ処理を何度も再利用したいときに使用する。 include や require で読み込んだファイル内の関数も使用できる。
関数内で定義した変数は関数内でのみ有効。 関数内と関数外に同名の変数がある場合、お互い影響がない。 関数内で関数外の値が必要な場合は、関数の引数で値を渡すか、関数内で該当変数に gobal を付ける。 なお、define() で定義した定数はプログラム内で事前に読み込んでいればどこででも使用できる。
処理した結果は return で返して受け取れる。
$str_g = 'test'; echo example('abc', 1); function example($str, $i){ global $str_g; return $str . $i . $str_g; }
関数をより再利用しやすいようにクラスも作成できる。 以下の例では class_example.php で ClassExample というクラスを作成。
<?php Class ClassExample{ private $num = array(); //コンストラクタ function __construct(){ $this->num = array(0, 1, 2, 3); } function get_test($a){ return $this->num[$a]; } }
次に別のPHPプログラムから class_example.php を読み込んでクラスを使用する。
require('./class_example.php'); $class_exa = new ClassExample(); $c = 2; echo $class_exa->get_test($c)