コンテンツにスキップ

PHP基礎

参考記事

名称 URL
PHPマニュアル https://www.php.net/manual/ja/index.php

1. 基本知識

RubyはWebアプリケーションを作るためのプログラミング言語の1つであり、 まつもとゆきひろ氏により1995年に開発されたオブジェクト指向スクリプト言語です。 オブジェクト指向言語なので、すべてのデータがオブジェクトとして表現されています。 つまり継承などといったオブジェクト指向ならではの機能を使うことができます。 Rubyを使うメリットとして一番大きいのは、Ruby on RailsというWebアプリケーションフレームワークを使うことができるということです。

2. コメントアウトと文字の表示

2.1. コメントアウト

phpのコメントアウトは以下のように記述する。

<?php
    // 1行コメント
    /* 
        複数行
        コメント
    */
?>

2.2. 文字の表示

<?php
    echo("Hello");
    echo('Hello');
?>

3. 変数と宣言

変数の型表示にはvar_dump()を使用する。

変数宣言 特徴
$変数名 ローカル変数: 宣言と初期化を同時に行う必要があります
変数名 定数: 慣習として定数(値を変えない変数)はすべて大文字で宣言します。 define()関数を使って定数を定義します。
$this->変数名 インスタンス変数: インスタンスメソッド内でのみ使用できる変数です
static $変数名 クラス変数: 定義されたクラス内で共有する値を扱うことのできる変数です。 staticキーワードを使用して宣言します。
$GLOBALS['変数名'] グローバル変数: メソッドやクラスを超えて参照できる変数です。 $GLOBALSスーパーグローバル変数を介してアクセスします。

以下はPHPの変数に関する説明です。

3.1. ローカル変数

ローカル変数は変数の中で最も一般的に使用されます。宣言と初期化を同時に行う必要があります。慣習として、すべて小文字を使用します。

$test = "php";

スコープ

メソッドや関数、クラスなどの定義された場所の範囲内でのみ使用できます。クラスや関数の外から参照しようとするとエラーが発生します。

3.2. 定数

慣習として、定数はすべて大文字で宣言されます。

const TEST = 1234;
define("TEST", "php");

スコープ

定義されたクラスや関数内でのみ参照できます。関数の中で定義することはできません。

3.3. インスタンス変数

変数名の先頭に「$」をつけることで宣言できます。

$this->test = "php";

スコープ

インスタンスメソッド内でのみ使用できる変数です。インスタンスごとに異なる値を持つことができ、メソッドを超えて参照することができます。

class User {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$user1 = new User("John");
$user2 = new User("Jane");

echo $user1->getName(); // "John"
echo $user2->getName(); // "Jane"

3.4. クラス変数

変数名の先頭に「static」キーワードをつけることで宣言できます。

class MyClass {
    public static $test = "php";
}

スコープ

定義されたクラス内で共有する値を扱うことができる変数です。他のインスタンスから参照しても、同じクラス内であれば共通の値として扱われます。

class MyClass {
    public static $counter = 0;

    public function incrementCounter() {
        self::$counter++;
    }

    public function getCounter() {
        return self::$counter;
    }
}

$instance1 = new MyClass();
$instance2 = new MyClass();

$instance1->incrementCounter();
echo $instance1->getCounter(); // 1

$instance2->incrementCounter();
echo $instance2->getCounter(); // 2

3.5. グローバル変数

変数名の先頭に「$」をつけることでグローバル変数を宣言できます。

$global = "global";

スコープ

ローカル変数の逆で、メソッドやクラスを超えて参照できる変数です。プログラムのどこからでも参照や変更が可能ですが、名前の衝突に注意する必要があります。

$global = "global";

function greet() {
    global $global;
    echo $global;
}

greet(); // "global"

4. データの型

PHP には様々なデータ型がありますが、基本データ型としては以下があります。

4.1. データ型

データ型 説明
整数 数値を表す。整数値を持つ。
浮動小数点数 実数を表す。小数点を含む数値を持つ。
文字列 文字列を表す。文字や文字列を格納する。
配列 複数の値をまとめて格納する。添字付き配列または連想配列として使われる。
真偽値 真(true)または偽(false)の値を持つ。条件分岐などで使用される。
null 値が存在しないことを表す特別な値。変数が値を持たない状態を表す。

4.2. 変数

PHPの変数は、特定のデータ型に依存しません。そのため、変数の宣言時にデータ型を指定する必要はありません。

$integer = 10; // 整数型
$float = 3.14; // 浮動小数点数型
$string = "PHP"; // 文字列型
$array = [1, 2, 3]; // 配列型
$boolean = true; // 真偽値型
$null = null; // null型

4.3. 変数の文字列中への挿入

文字列中に変数を挿入するには、ダブルクォートで囲みます。これを変数展開と呼びます。

$text = "PHP";
echo "私は{$text}を勉強しています";

4.4. 配列

配列は、array()関数を使用するか、短縮構文[]を使って宣言します。添字付き配列と連想配列の両方を表現できます。

// 添字付き配列
$data = [1, 2, 3]; 
echo $data[0]; // 1
echo $data[count($data) - 1]; // 3
echo count($data); // 3

// 2次元配列
$data2 = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]
];
echo $data2[1][1][1]; //7

// 連想配列
$assoc_array = [
    'name' => 'John',
    'age' => 30
]; 
echo $assoc_array['name']; // John
echo $assoc_array['age']; // 30


// 連想配列2
$assoc_array2 = [
    'test' => [
        'a' => 100,
        'sex' => 'male'
    ],
    'test2' => [
        'b' => 200,
        'sex' => 'female'
    ]
]
echo $assoc_array['test2']['b']; // 200

4.5. 配列メソッド

詳しくはコチラから。

<?php
// splitメソッド
$color = "blue yellow red";
print_r(explode(" ", $color)); // ["blue", "yellow", "red"]
$color = "blue,yellow,red";
print_r(explode(",", $color)); // ["blue", "yellow", "red"]

// joinメソッド
$color = ["blue", "yellow", "red"];
echo implode("", $color); // "blueyellowred"

// first/lastメソッド
$languages = ["Ruby", "PHP", "Java"];
echo $languages[0]; // Ruby
echo end($languages); // Java

// unshift/pushメソッド
$color = ["blue", "red", "yellow"];
array_unshift($color, "white");
array_push($color, "black");
print_r($color); // ["white", "blue", "red", "yellow", "black"]

// shift/popメソッド
$color = ["blue", "red", "yellow"];
array_shift($color);
array_pop($color);
print_r($color); // ["red"]

// sumメソッド
echo array_sum([1, 2, 3]); // 6
$a = [1, 2, 3];
echo array_sum($a) / count($a); // 2

// sampleメソッド
echo random_int(1, 3); // 1, 2, 3のどれかをランダムに返す

// shuffleメソッド
$numbers = [1, 2, 3];
shuffle($numbers);
print_r($numbers); // [3, 2, 1], [3, 1, 2], [2, 1, 3], [2, 3, 1], [1, 2, 3], [1, 3, 2]のどれかを返す

// sortメソッド
$numbers = [3, 1, 2];
sort($numbers);
print_r($numbers); // [1, 2, 3]

$names = ["aya", "jun", "ichiro"];
sort($names);
print_r($names); // ["aya", "ichiro", "jun"]

// uniqメソッド
$num = [1, 2, 2, 3, 4, 5, 5];
print_r(array_unique($num)); // [1, 2, 3, 4, 5]

// injectメソッド
$num = [1, 2, 3, 4, 5];
echo array_reduce($num, function($carry, $item) { return $carry + $item; }); // 15

// includeメソッド
$name = ["taro", "hanako", "saki"];
echo in_array("taro", $name) ? 'true' : 'false'; // true
echo in_array("yoshiki", $name) ? 'true' : 'false'; // false

// mapメソッド
$colors = ["blue", "red", "yellow"];
print_r(array_map(function($color) { return strtoupper($color); }, $colors)); // ["BLUE", "RED", "YELLOW"]

$numbers = [2 ,3 , 4, 5];
print_r(array_map(function($num) { return $num * 2; }, $numbers)); // [4, 6, 8, 10]

// selectメソッド/rejectメソッド
$color = ["blue", "red", "yellow", 1, 3];
print_r(array_filter($color, function($item) { return is_string($item); })); // ["blue", "red", "yellow"]
print_r(array_filter($color, function($item) { return !is_string($item); })); // [1, 3]

// group_byメソッド
$scores = [70, 100, 90, 95, 80];
print_r(array_reduce($scores, function($acc, $item) {
    $acc[$item >= 80 ? 'true' : 'false'][] = $item;
    return $acc;
}, [])); // ['true' => [100, 90, 95, 80], 'false' => [70]]

$array = [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6];
print_r(array_reduce($array, function($acc, $item) {
    $acc[$item][] = $item;
    return $acc;
}, [])); // [1 => [1], 2 => [2, 2], 3 => [3, 3, 3], 4 => [4, 4, 4], 5 => [5, 5], 6 => [6]]
?>

5. 演算子

演算子は一般的によく使われる演算処理を記号などで表現したものです。たとえば、足し算をする+も演算子の一種です。以下に、PHPでよく使われる演算子を示します。

5.1. 二項演算子

演算子 演算した値の結果
+ 2つの数字の和または文字列の結合
- 2つの数字の差
* 2つの数字の積
/ 2つの数字の商
% 2つの数字の除算の余り
** 指数の計算結果

5.2. 単項演算子

演算子 演算した値の結果
+(単項プラス演算子) 数値や文字列を数値に変換し演算、数値でない場合は特殊な値に変換
-(単項マイナス演算子) 単項プラス演算子のマイナス版
++(インクリメント演算子) オペランドの値を1増やす演算子。前置と後置で評価の順序が異なるが、最終的な演算結果は同じ
--(デクリメント演算子) インクリメント演算子のデクリメント版

5.3. 比較演算子

演算子 演算した値の結果
=== 2つのオペランドを比較し、同じ型で同じ値の場合にTrue、そうでない場合はFalseを返す
!== 2つのオペランドを比較し、異なる型または異なる値の場合にTrue、そうでない場合はFalseを返す
> 左オペランドが右オペランドよりも大きい場合はTrueを返す
>= 左オペランドが右オペランド以上の場合はTrueを返す
< 右オペランドが左オペランドよりも大きい場合はTrueを返す
<= 右オペランドが左オペランド以下の場合はTrueを返す

5.4. ビット演算子

ビット演算子については、表記の割愛とさせていただきますが、必要に応じて追記します。

5.5. 論理演算子

論理演算子は、主に真偽値を扱う演算子です。AND(かつ)、OR(または)、NOT(否定)を表現します。

演算子 演算した値の結果
&& AND
|| OR
! NOT

5.6. 条件(三項)演算子

条件演算子は、条件式を評価した結果がTrueの場合はTrueのときの処理を返し、Falseの場合はFalseのときの処理を返します。

条件式 ? Trueのときの処理 : Falseのときの処理;

使用例:

$result = 80;
$flag = $result > 60 ? "合格" : "不合格";
echo $flag; // 合格

6. 型変換

6.1. 暗黙的な型変換

暗黙的な型変換は、処理の過程で明示的に型変換を行わないで実行される型変換を指します。PHPでは様々な場面で暗黙的な型変換が行われますが、意図しない型変換による予期しない動作やバグの原因となる可能性があるため、使用する際には注意が必要です。

6.2. 明示的な型変換

文字列 => 数値

文字列から数値への変換には、intval() 関数やキャストを使用します。

// 文字列 => 数値
$str = "10";
echo intval($str); // 10

数値 => 文字列

数値から文字列への変換には、strval() 関数やキャストを使用します。

// 数値 => 文字列
$int = 10;
echo strval($int); // "10"

数値(整数) => 数値(小数)

整数から浮動小数点数への変換には、キャストを使用します。

$num = 10;
echo (float)$num; // 10.0

小数から整数への変換には、キャストを使用します。この場合、小数部分は切り捨てられます。

$num = 12.67;
echo (int)$num; // 12

連想配列/範囲オブジェクト => 配列

連想配列や範囲オブジェクトから配列への変換には、array_values() 関数を使用します。

$human = ["name" => "pikawaka", "age" => 25];
print_r(array_values($human)); // Array ( [0] => pikawaka [1] => 25 )

配列 => 連想配列

配列から連想配列への変換は、配列のキーと値を使用して新しい連想配列を作成します。

$human = ["name", "pikawaka", "age", 25];
$assoc_array = array_combine(array_slice($human, 0, count($human) - 1, true), array_slice($human, 1, count($human) - 1, true));
print_r($assoc_array); // Array ( [name] => pikawaka [age] => 25 )

以下はPHP版です:

6.3. 真偽判定メソッド

nullかの判定

変数の値がnullかどうかを判定する場合は is_null() を使用します。

$value = null;
if (is_null($value)) {
  echo "valueはnullです"; // 実行
} else {
  echo "valueはnullではありません";
}

空文字列・空配列かの判定

empty() 関数は空の文字列や空の配列の場合に true を返します。nullbooleaninteger に対して呼び出すと警告が発生します。

$test = "";
if (empty($test)) {
  echo "testは空です"; // 実行
} else {
  echo "testは空ではありません";
}

7. 関数(メソッド)と宣言

関数名はcamelCaseもしくはsnake_caseで命名する。

メソッドの宣言

PHPでは、メソッドを定義するために function キーワードを使います。次のように関数を定義できます。

function メソッドの名前() {
  やりたい処理
}

デフォルトの引数

メソッドに対して、何らかの値を渡したい場合は、引数を付けます。引数付きのメソッド定義は、以下の書式を使います。

function hello($name, $age) {
  echo "Hello World! $name! You are $age years old!";
}

キーワード引数

PHPではキーワード引数の概念はありませんが、関数の引数にデフォルト値を指定することができます。

function hello($name = "World", $age = 30) {
  echo "Hello $name! You are $age years old.";
}
hello("tomochan", 43);

返り値のあるメソッド

function multiple($num) {
    return $num * 2;
}

//変数$numberを定義
$number = 3;

//変数$numberをmultipleメソッドで2倍にして戻す
$number = multiple($number);
echo $number; // 6

タイプヒンティング

型の指定ができるもの。

function hello(string $name,int $age) {
  echo "Hello World! $name! You are $age years old!";
}

可変変数

function hello(string ...$name): string
{
  //処理 ($nameは配列になる)
}

$name1 = hello($name1, $name2);

様々な関数

無名関数

無名関数(または匿名関数)は名前を持たない関数のこと。

$greeting = function($name) {
    return "Hello, $name!";
};

クロージャ

無名の関数を作成し、変数に代入する方法。

<?php
// クロージャを作成して変数に代入する
$greeting = function($name) {
    return "Hello, $name!";
};

// 変数に代入されたクロージャを実行する
echo $greeting("John"); // "Hello, John!"
echo $greeting("Alice"); // "Hello, Alice!"
?>

コールバック関数

関数の変数に関数を指定できる。

function useCombine(array $name, callback $func){
  $concatName = $func(...$name);
  print($func.'関数での結合結果:' .$concatName. '<br>');
}

useCombine($nameParam, 'combineSpace');

メソッドチェーン

メソッドチェーンはオブジェクト指向プログラミングにおいて複数のメソッド呼び出しを一つの式でつなげて実行する手法のこと。

<?php
class Calculator {
    private $result;

    public function __construct($initialValue) {
        $this->result = $initialValue;
    }

    public function add($number) {
        $this->result += $number;
        return $this; // 自分自身のインスタンスを返す
    }

    public function multiply($number) {
        $this->result *= $number;
        return $this; // 自分自身のインスタンスを返す
    }

    public function getResult() {
        return $this->result;
    }
}

// メソッドチェーンでの使用例
$calc = new Calculator(10);
$result = $calc->add(5)->multiply(2)->getResult();
echo $result; // 30 を出力
?>

8. 条件分岐

8.1. if文

if (条件式1){
  実行する文1
} else if (条件式2){
  実行する文2
} else {
  実行する文3
}

8.2. switch文

$color = "red";

switch ($color) {
    case "red":
        echo "赤い色です。";
        break;
    case "blue":
        echo "青い色です。";
        break;
    case "green":
        echo "緑の色です。";
        break;
    default:
        echo "赤、青、緑以外の色です。";
}

以下はPHP版です:

9. ループと反復処理

9.1. while文

「while」文は指定した条件式が真(true)の間、繰り返し処理を行います。

while (条件式) {
  実行する処理1;
  実行する処理2;
}

9.2. do-while文

「do-while」文は指定した条件式が真(true)の間、繰り返し処理を行いますが、ループの最初に条件をチェックするのではなく、最初の一回目の実行後に条件をチェックします。

do {
  実行する処理1;
  実行する処理2;
} while (条件式);

9.3. for文

for (初期化式; 条件式; 更新式) {
  実行する処理1;
  実行する処理2;
}

9.4. foreach文

「foreach」文は配列やオブジェクトの要素を反復処理するための文です。

foreach ($配列 as $要素) {
  実行する処理1;
  実行する処理2;
}

9.5. foreachの他のメソッド

「foreach」文の他にも、配列や範囲オブジェクトの要素を反復処理するためのさまざまなメソッドがあります。

array_walk関数

「array_walk」関数は、配列のすべての要素に対して、指定した関数を適用します。

$array = [1, 2, 3, 4, 5];
array_walk($array, function($value, $key) {
    echo "Key: $key, Value: $value\n";
});

array_map関数

「array_map」関数は、配列のすべての要素に対して、指定したコールバック関数を適用し、新しい配列を返します。

$array = [1, 2, 3, 4, 5];
$new_array = array_map(function($value) {
    return $value * 2;
}, $array);
print_r($new_array); // [2, 4, 6, 8, 10]

array_reduce関数

「array_reduce」関数は、配列の要素を左から右に順番に減らして、単一の値にまとめます。

$array = [1, 2, 3, 4, 5];
$total = array_reduce($array, function($carry, $item) {
    return $carry + $item;
}, 0);
echo $total; // 15

9.6. while文とdo-while文の違い

「while」文は、条件が真(true)の場合に実行され、その後に条件が評価されます。一方、「do-while」文は、最初に実行され、その後に条件が評価されます。つまり、「do-while」文は条件が偽(false)でも最初の1回は必ず実行されます。

範囲オブジェクト

PHPにはRubyのような範囲オブジェクトはありませんが、代わりに「range()」関数を使って範囲を表現することができます。

$range1 = range(5, 10); // 5から10までの範囲を持つ配列を生成
$range2 = range('d', 'g'); // 'd'から'g'までの範囲を持つ配列を生成

範囲オブジェクトの作成にはRangeクラスのオブジェクトを直接使用する代わりに、配列を生成する「range()」関数を使用します。

10. クラス

クラス(class)とは、メソッドなどの処理を入れる入れ物のようなものです。 PHPなどのオブジェクト指向型の言語では、この入れ物であるクラスの中に処理を書くことが基本となってきます。

10.1. クラスの定義

__construct関数はインスタンス生成時に自動で実行される関数です。 インスタンス生成時に引数を渡し、インスタンス変数をセットします。

class クラス名 {
  public $name;
  public $price;

  public function __construct($name, $price) {
    $this->name = $name;
    $this->price = $price;
  }
}

クラスのインスタンス化

クラスはnew演算子でインスタンスであるオブジェクトを作成できます。 class構文で定義したクラスからインスタンスを作成することをインスタンス化と呼びます。

class Product {
  public $name;
  public $price;
}

// インスタンス生成
$product1 = new Product();

インスタンスメソッド(class内自作関数)でインスタンス変数を用いる

class Product {
  public $name;
  public $price;

  public function create() {
    echo "製品名は{$this->name}です\n";
    echo "価格は{$this->price}です\n";
  }
}

// インスタンス生成
$product1 = new Product();

// インスタンス変数に値をセット
$product1->name = "iphone";
$product1->price = 100000;

// インスタンスメソッド実行
$product1->create();

インスタンスメソッドのキーワード引数を用いたインスタンス化

class Product {
  public $name;
  public $price;

  public function __construct($name, $price) {
    $this->name = $name;
    $this->price = $price;
  }

  public function info() {
    return "製品名:{$this->name}、価格:{$this->price}";
  }
}

// インスタンス生成
$product1 = new Product("iphone", 100000);

echo $product1->info(); // => 製品名:iphone、価格:100000

10.2. ファイル分割(require)

require "ファイル名.php";

require "product.php";

// 読み込んだファイルのクラスでインスタンス生成
$product1 = new Product("iphone", 100000);
echo $product1->info(); // => 製品名:iphone、価格:100000

10.3. 入力値の受け取り(gets.chomp)

コンソールからの入力値は$変数名 = fgets(STDIN)で受け取ります。 変数値は文字列型であるため。数値に等にするには(int)や(float)を使用します。

10.4. 継承

親クラスのインスタンス変数とインスタンスメソッドを引き継ぎます。

class 子クラス名 extends 親クラス名 {
  // 子クラスの処理
}

10.5. オーバーライド

インスタンス変数・メソッドの上書きのこと。 (親クラスで既に定義されているものならオーバーライドになる)

10.6. 親クラスで重複するメソッドの呼び出し(parent)

子クラスで親クラスのメソッドを呼び出すためのキーワードです。

parent::メソッド名();

10.7. クラス定数

クラス内で共有される定数を定義します。

class クラス名 {
  const 定数名 = 値;
}

10.8. クラスメソッド

クラス名に対して呼び出すメソッドはクラスメソッドと呼ばれます。

class クラス名 {
  public static function メソッド名() {
    // メソッドの処理
  }
}
class Math {
  public static function add($a, $b) {
    return $a + $b;
  }
}

// クラスメソッドの呼び出し
$result = Math::add(5, 3);
echo $result; // => 8

10.9. Dateクラス

日付を扱うにはDateTimeクラスを用います。

$date = new DateTime('2022-02-22');
echo $date->format('Y-m-d'); // => 2022-02-22

今日の日付のDateTimeインスタンスの取得

new DateTime()とすることで今日の日付のインスタンスが作成可能です。

$today = new DateTime();
echo $today->format('Y-m-d'); // => 今日の日付

10.10. インターフェース

インターフェースはクラスが実装するメソッドのリストを定義します。 インターフェース内のメソッドは実装されていないため、インターフェースを実装するクラスはそのメソッドを必ず実装する必要があります。

interface インターフェース名 {
  public function メソッド名();
}

class クラス名 implements インターフェース名 {
  public function メソッド名() {
    // メソッドの処理
  }
}
interface Shape {
  public function getArea();
}

class Circle implements Shape {
  private $radius;

  public function __construct($radius) {
    $this->radius = $radius;
  }

  public function getArea() {
    return pi() * pow($this->radius, 2);
  }
}

$circle = new Circle(5);
echo $circle->getArea(); // => 円の面積

10.11. 例外処理

例外処理は、プログラムの実行中に予期せぬ問題が発生した場合に備えて、特定のエラーをキャッチして適切に処理するための仕組みです。

try {
  // 例外が発生する可能性のある処理
} catch (Exception $e) {
  // 例外が発生した場合の処理
}
try {
  $result = 10 / 0; // ゼロ除算の例外が発生
} catch (Exception $e) {
  echo "エラーが発生しました: " . $e->getMessage();
}

10.12. 名前空間

名前空間は、クラスや関数、定数などの名前の衝突を避けるために使用されます。

namespace 名前空間名;

class クラス名 {
  // クラスの定義
}
namespace App\Models;

class Product {
  // クラスの定義
}

10.13. 自動読み込み(オートローディング)

クラスを動的に読み込む機能を提供します。Composerを使ってオートローディングを設定することが一般的です。

// Composerで生成されるオートロードファイルの読み込み
require 'vendor/autoload.php';
composer dump-autoload

10.14. 可視性修飾子

クラスのプロパティやメソッドの可視性を制御します。

  • public: クラス内部および外部からアクセス可能
  • protected: クラス内部およびサブクラスからのみアクセス可能
  • private: クラス内部からのみアクセス可能
class MyClass {
  public $publicProperty;
  protected $protectedProperty;
  private $privateProperty;

  public function publicMethod() {
    // メソッドの処理
  }

  protected function protectedMethod() {
    // メソッドの処理
  }

  private function privateMethod() {
    // メソッドの処理
  }
}

11. モジュール

モジュールはインスタンス化できないが、メソッドを格納できるものです。 モジュールは module から end までの範囲で定義されます。moduleの後にはモジュール名を指定します。

<?php
  // モジュールの定義
  module Number {
    // メソッドの定義
    public function plus($num1, $num2) {
      return $num1 + $num2;
    }
  }
?>

モジュールの使用

<?php
  // モジュールの定義
  module TestModule {
    // メソッドの定義
    public static function Min($x, $y) {
      if ($x < $y) {
        return $x;
      } else {
        return $y;
      }
    }

    // メソッドの定義
    public static function Max($x, $y) {
      if ($x > $y) {
        return $x;
      } else {
        return $y;
      }
    }
  }

  // モジュールのメソッドを使用
  echo TestModule::Min(1, 5) . "\n"; // => 1
  echo TestModule::Max(1, 5) . "\n"; // => 5
?>

12. よく使う組み込み関数

12.1. strlen/mb_strlen関数

文字列の長さを表示する関数。 日本語文字はマルチバイトなので,mbをつける。

$exec = 'test';

echo strlen($exec); //4
echo mb_strlen($exec); //4 マルチバイト計測する

12.2. str_replace関数

文字列の置換を行う関数。

$str = '文字列を置換して';
echo str_replace('置換', 'ちかん', $str); //文字列をちかんして

12.3. explode関数

指定文字列で分割する関数

$str = '192.168.3.0';

echo explode('.', $str);  // [192,168,3,0]

12.4. preg_match関数

正規表現で文字列が含まれるか確認する。

preg_match('正規表現', 文字列);

12.5. substr関数

指定文字列から文字列を取得する関数。

mb_substr("あいうえお", 2);  //うえお

13. PHPのデバック

exit;で途中脱出できる。 var_dump();などで変数状態表示も可能。

バグ原因究明などで使用できる。

14. PHPの予約語

PHPの予約語は以下の通りです(変数名として使用できません):

__halt_compiler()  abstract    and         array       as
break           callable    case        catch       class
clone           const       continue    declare     default
die()           do          echo        else        elseif
empty()         enddeclare  endfor      endforeach endfunction
endif           endwhile   eval()      exit()      extends
final           finally     for         foreach     function
global          goto        if          implements  include
include_once    instanceof  insteadof   interface   isset()
list()          namespace   new         or          print
private         protected   public      require     require_once
return          static      switch      throw       trait
try             unset()     use         var         while
xor             yield