解説記事:PHP

最終更新日:

主に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__ : 現在のクラスのメソッド名

定義済みの変数

定義済の変数(PHPマニュアル)

環境変数

環境変数(PHPマニュアル)

比較演算子

$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+@キーで入力する)で囲むと、シェルコマンドや外部プログラムを実行して、その表示結果を得る。

数学関数

数学関数(Math関数)(PHPマニュアル)

制御構造

制御構造(PHPマニュアル)

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="radio" name="部品名" value="値" checked>テキスト
例(appleグループ):

<input type="radio" name="apple" value="1" checked>はい
<input type="radio" name="apple" value="2">いいえ

チェックボックス


<input 	type="checkbox" name="部品名" value="値" checked>テキスト
例:

<input type="checkbox" name="pear" value="1" checked>はい
<input type="checkbox" name="pear" value="2">いいえ

環境

XAMPPをWindows上にインストールする。

データベースSQLite3を使えるようにするには、以下のように設定ファイルphp.iniを編集する:

  1. 「C:\xampp\php」の下にある「php.ini」を開く
  2. 「;extension=php_pdo_sqlite.dll」の一行を探す
  3. 冒頭の「;」を削除し、ファイルを上書き保存する
  4. Apacheをすでに起動していた場合、再起動する

参考資料