最終更新日:
主にC言語と異なる部分を紹介。
文法等は、PHPマニュアル(日本語版)を参照。
基本的な使い方
var_dump()関数
$e = "PHPの使い方";
var_dump($e);
-> string(12) "PHPの使い方"
ヒアドキュメント
<body>
<?php
$a = <<< EOD
Hello
World!\n
EOD;
print "$a";
?>
</body>
変数の判定
変数の型を判定
is_bool($a)
is_number($a)
is_float($a)
is_int($a)
is_string($a)
is_object($a)
is_array($a)
is_null($a)
変数の状態を調べる(フォームデータの受け取りの際に値があるか判定するのに用いる)
isset($a)
empty() : 変数が存在しない、変数の値が0、変数の値がfalse、の場合にtrueになる。
unset() : 変数の値をセットされていない状態に戻す
配列
$a = array(0 => 1, 1 => 2, 2 => 3) /* インデックス指定 */
$a = array('dog'=>'いぬ', 'cat'=>'ねこ') /* 連想配列 */
$a = [[1,2,3], [4,5,6]] /* 多次元配列. $a[1][0]のように参照する. */
unset($a[1]); /* 配列の要素を破棄 */
$a = array_diff($a, $b); /* 配列の差を取得する */
array_push($a, 4, 5); /* 配列の要素の追加 */
リファレンス
$b=100;
$a=&$b; /* $aを$bのリファレンスにする */
$b=200;
定数
define("DEF_COLOR","Blue");
define("COLORS",["Red", "Blue", "Yello"]);/*配列の定数(PHP7.0以降)*/
$color=COLORS[1];
const STD_NUM = 35 + 36; /* 式や配列を利用できる*/
定義済み定数
__LINE__ : スクリプトの現在の行番号
__FILE__ : スクリプトのファイル名
__FUNCTION__ : 現在の関数名
__CLASS__ : 現在のクラス名
__METHOD__ : 現在のクラスのメソッド名
定義済みの変数
環境変数
比較演算子
$a === $b : $aと$bは値が等しく、かつ、型も同じ(変数の場合)。
$a === $b : $aと$bは要素ペア、並び順、型が同じ(配列の場合)。
条件演算子
NULL合体演算子(PHP7.0以降): $a = $x ?? "(無名)"; /* NULLだった時の値 */
宇宙演算子(PHP7.0以降): $a = $b <=> $c; /* $b > $cのとき1、$b=$cのとき0、$b<$cのとき-1を返す */
その他の演算子
エラー制御演算子: @print($a / 0); /* エラーでは処理が中断するが、警告では中断しない。メッセージを表示しない。 */
文字列演算子: $str = "Hello" . " " . "World";
実行演算子: $output = `time /T`;print("<pre>".$output."</pre>"); /*バッククォート(Shift+@キーで入力する)で囲むと、シェルコマンドや外部プログラムを実行して、その表示結果を得る。
数学関数
制御構造
foreach文 : $a=array(1,2,3);foreach ($a as $b){}
break,continueの階層指定: for ($lv1=0; $lv1<3;$lv1++){for ($lv2=0;$lv2<3;$lv++){if ($lv1+$lv2==1){break 2;/*2階層飛び越える*/}}}
関数の定義
一般的な関数: function addnum($a, $b) { $x = $a + $b; return $x;}
戻り値や引数を持たない関数: function Hello() { print "Hello";}
定義済みの関数: 関数リファレンス(PHPマニュアル)
引数の渡し方
参照渡し: function getmenu(&$a) { $a = 'Coffee';} $b = 'Tea'; getmenu($b);
デフォルト引数: function getmenu($a = 'Drink'){ print $a;}
可変長引数
function myMax($p1, $p2, ...$pn) { }; /* 3つめ以降は配列として格納される */
function avg(...$param) { $sum = 0; foreach($param as $n) { $sum += $n; } return $sum / count($param);}; /* 3つめ以降は配列として格納される */
function myMin($a, $b, $c) {} $p = [2, 3]; $q = myMin(5, ...$p); /* 固定長の関数に配列の値を展開して与える */
引数の型
function addnum2(int $a, int $b) { $x = $a + $b; return $x;}
- int: 整数型 (PHP7.00以降)
- float : 実数型 (PHP7.00以降)
- string : 文字列型 (PHP7.00以降)
- bool : 論理型 (PHP7.00以降)
- callable : コールバック関数
- array : 配列
- self : 関数の所属するクラス
- クラス名
- インターフェース名
コールバック関数: function HelloFunc() {print "こんんちは";} function callfunc(callable $f) { $f(); print "xxx";} callfunc("HelloFunc"); /* 関数名 */
戻り値
function addnum3($a, $b): int /* 戻り値の型指定 */ { }; /* 型違いのときはTypeError例外が発生する */
関数で複数の値を返す
<?php
function getCharRange($s) {
$pos1 = $pos2 = -1;
for ($i=0; $i<strlen($s); $i++) {
if ($s[$i] == "i") {
if ($pos1 < 0) {
$pos1 = $i;
}
$pos2 = $i;
}
}
return array($pos1+1, $pos2+1)
}
list($begin, $end) = getCharRange("Shiori")
?>
他のファイルの挿入
require, includeを使う。 requireはエラーメッセージが表示され、処理を中止する。
includeは警告メッセージが表示され、処理は継続する。 _onceをつけると、重複の読み込みをさけることができる。
URLを指定すれば、他のサーバーにあるファイルも挿入できる。
require "http://jp.php.net/manual/ja/index.php";
require 'yomikomi1.php'
変数のスコープ
関数内で定義された変数=ローカル変数。
関数外で定義された変数や、関数内でglobalをつけて記述した変数=グローバル変数。PHPスクリプト全体がスコープになる。
スーパーグローバル変数$GLOBALSを使っても同じ意味になる。
$a = 1;
function ShowNum(){
print $GLOBALS[ '$a'];
}
ShowNum();
初期化は最初の一回のみ。前の値を残す=static変数
static $a = 1;
無名関数(クロージャ)
関数の名前を省略したもの = 無名関数。無名関数は変数に入れておいて、あとで呼び出すことができる。
$g = function() {
print "こんにちは";
}; // セミコロンが必要
$g(); // 関数の呼び出し
無名関数はよくコールバック関数と組み合わせて使われる。余分な関数定義を省略して簡潔に書くことができる。
// 関数名を使って呼び出す例
function Hello() {
print "こんにちは";
}
function callfunc(callable $f) {
$f(); // 呼び出し
print "PHPさん";
}
callfunc("Hello"); // 文字列内は関数名
↓
// 無名関数を使う例
function callfunc(callable $f) {
$f(); // 呼び出し
print "PHPさん";
}
callfunc(function() {
print "Hello";
}); // 無名関数
無名関数が宣言されている場所の変数を参照するには、無名関数に渡す変数をuseで指定する。
$a = "Hello";
$b = "PHP";
$c = "さん";
$func = function($p) use ($b, $c) {
print $p;
print $b;
print $c;
};
$func($a);
関数を使った可変長引数の処理 (PHP5.6.0以降)
func_num_args() : 関数に渡された引数の数を返す。
func_get_arg() : 関数に渡された引数のうち1つを取得する。
function print_args_val() {
$a = func_num_args();
for ($i = 0; $i < $a; $i++) {
$b = func_get_arg($i);
print $b;
}
}
print_arg_val('A', 'B', 'C');
フォームを使った送信(POST)
sendname.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>名前</title>
</head>
<body>
<form action="receivename.php" method="post">
<p>名前<input type="text" name="name"></p>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>
receivename.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力フォーム</title>
</head>
<body>
<p>
<?php
print ($_POST[ 'name' ]);
?>
さん、こんにちは。
</p>
</body>
</html>
参考:フォーム部品
チェックボックス
<input type="checkbox" name="部品名" value="値" checked>テキスト
例:
<input type="checkbox" name="pear" value="1" checked>はい
<input type="checkbox" name="pear" value="2">いいえ
ドロップダウン式メニュー
<select name="部品名">
<option value="値" selected>テキスト</option>
</select>
例:
<select name="orange">
<option value="1" selected>はい</option>
<option value="2">いいえ</option>
</select>
環境
XAMPPをWindows上にインストールする。
データベースSQLite3を使えるようにするには、以下のように設定ファイルphp.iniを編集する:
- 「C:\xampp\php」の下にある「php.ini」を開く
- 「;extension=php_pdo_sqlite.dll」の一行を探す
- 冒頭の「;」を削除し、ファイルを上書き保存する
- Apacheをすでに起動していた場合、再起動する
参考資料
- PHPの絵本 第2版
- PHPマニュアル(日本語版)