📖

PHP 基礎

2024/07/25に公開

はじめ

変数と型・型変換・定数

変数

PHPでは、変数を $ 記号で宣言できる。
変数は動的型付けで、型を明示する必要はない。

<?php
$variable = "Hello, PHP!";
echo $variable; // 出力: Hello, PHP!
?>
  • 変数名: 変数名は $ で始まり、英数字とアンダースコアが使用できる。(例: $my_var, $variable1)。
  • 変数のスコープ: グローバルスコープまたはローカルスコープ

論理型

論理型(boolean)は、true または false の2つの値を持つ型。

<?php
$isTrue = true;
$isFalse = false;

if ($isTrue) {
    echo "これは真です。"; // 出力: これは真です。
}
?>

整数

整数型(integer)は、整数値。PHPでは、整数は符号付き32ビットまたは64ビットの値。

<?php
$integer = 123;
echo $integer; // 出力: 123
?>

浮動小数点数

浮動小数点数(float)は、少数点を含む数値。
精度: 浮動小数点数は計算結果が近似値。

<?php
$float = 3.14;
echo $float; // 出力: 3.14
?>

文字列

文字列(string)は、テキストデータを扱う型。

<?php
$string = "こんにちは、PHP!";
echo $string; // 出力: こんにちは、PHP!
?>

連結: . 演算子を使用して文字列を結合できる。

<?php
$firstName = "John";
$lastName = "Doe";
$fullName = $firstName . " " . $lastName;
echo $fullName; // 出力: John Doe
?>

配列

配列(array)は、複数の値を一つの変数に格納するための型。

<?php
$fruits = array("Apple", "Banana", "Cherry");
echo $fruits[1]; // 出力: Banana
?>

連想配列: キーと値のペアでデータを格納できる。

<?php
$person = array("first_name" => "Jane", "last_name" => "Doe");
echo $person["first_name"]; // 出力: Jane
?>

オブジェクト

オブジェクト(object)は、クラスから生成されたインスタンス。オブジェクトはプロパティ(属性)とメソッド(機能)を持つ。

<?php
class Person {
    public $name;
    
    function greet() {
        return "Hello, " . $this->name;
    }
}

$person = new Person();
$person->name = "Alice";
echo $person->greet(); // 出力: Hello, Alice
?>

リソース

リソース型(resource)は、外部リソースを参照するための特殊な型。

  • 使用例: データベース接続、ファイル操作、ネットワーク接続など。
<?php
$fileHandle = fopen("example.txt", "r");
if ($fileHandle) {
    echo "ファイルが正常に開かれました。";
    fclose($fileHandle);
} else {
    echo "ファイルを開けませんでした。";
}
?>

NULL

NULLは、変数が値を持たない状態を表す。

<?php
$value = NULL;
if (is_null($value)) {
    echo "値はNULLです。"; // 出力: 値はNULLです。
}
?>

定義済み変数

PHPにはいくつかのグローバル定義済み変数が存在する。
例:$_GET$_POST$_SESSION、 etc...

<?php
echo $_SERVER['HTTP_USER_AGENT']; // ユーザーエージェントを出力
?>

定数

定数は、変更できない値を定義するためのもの。
define() 関数を使用して定義する。

<?php
define("PI", 3.14159);
echo PI; // 出力: 3.14159
?>

定数配列

定数配列(const array)はPHP 7.4以降でサポートされており、const キーワードで定義できる。

<?php
const FRUITS = ["Apple", "Banana", "Cherry"];
echo FRUITS[1]; // 出力: Banana
?>

定義済み定数

組み込み定義済み定数が存在する。
例:PHP_VERSIONE_ERROR 、etc...

<?php
echo PHP_VERSION; // PHPのバージョンを出力
?>

演算

加算演算子(+

加算演算子(+)は、2つの数値を加算する。

<?php
$a = 10;
$b = 5;
$result = $a + $b;
echo "加算: " . $result; // 出力: 15
?>

減算演算子(-

減算演算子(-)は、1つの数値から別の数値を減算する。

<?php
$a = 10;
$b = 5;
$result = $a - $b;
echo "減算: " . $result; // 出力: 5
?>

乗算演算子(*

乗算演算子(*)は、2つの数値を乗算する。

<?php
$a = 10;
$b = 5;
$result = $a * $b;
echo "乗算: " . $result; // 出力: 50
?>

除算演算子(/

除算演算子(/)は、1つの数値を別の数値で除算する。

<?php
$a = 10;
$b = 5;
$result = $a / $b;
echo "除算: " . $result; // 出力: 2
?>

剰余演算子(%

剰余演算子(%)は、除算の余りを返す。

<?php
$a = 10;
$b = 3;
$result = $a % $b;
echo "剰余: " . $result; // 出力: 1
?>

累乗演算子(**

累乗演算子(**)は、基数の累乗を計算できる。

<?php
$a = 2;
$b = 3;
$result = $a ** $b;
echo "累乗: " . $result; // 出力: 8
?>

インクリメント演算子とデクリメント演算子

インクリメント演算子とデクリメント演算子は、変数の値を1増加/減少させるために使用する。
プレインクリメントとポストインクリメントの2つの形式がある。
プレインクリメント: 変数の値を増加させてから、その値を返す。

<?php
$number = 5;
 // プレインクリメント
echo ++$number; // 出力: 6
echo --$number; // 出力: 4
?>

ポストインクリメント: 変数の値を返した後で、値を増加させる。

<?php
$number = 5;
// ポストインクリメント
echo $number++; // 出力: 5
echo $number;   // 出力: 6
echo $number--; // 出力: 5
echo $number;   // 出力: 4
?>

論理演算子

  • &&: 論理積(AND)。両方の条件が真であれば真を返す。
  • ||: 論理和(OR)。どちらかの条件が真であれば真を返す。
  • !: 論理否定(NOT)。条件が偽であれば真を返す。

比較演算子

  • ==: 等しい。値が同じであれば真を返す。
  • ===: 厳密に等しい。値と型が同じであれば真を返す。
  • !=: 等しくない。値が異なれば真を返す。
  • !==: 厳密に等しくない。値または型が異なれば真を返す。
  • <: 小さい。左側の値が右側の値より小さければ真を返す。
  • >: 大きい。左側の値が右側の値より大きければ真を返す。
  • <=: 以下。左側の値が右側の値以下であれば真を返す。
  • >=: 以上。左側の値が右側の値以上であれば真を返す。

ビット演算子

ビット演算子は、整数値のビット単位での操作を行う。

&: ビット論理積。対応するビットが両方とも1であれば1を返す。

// 初期値
$a = 60; // 0011 1100 in binary
$b = 13; // 0000 1101 in binary
// ビット論理積(AND)
$and = $a & $b;
echo "ビット論理積 (AND): " . $and . "\n"; // 出力: 12 (0000 1100 in binary)

|: ビット論理和。対応するビットがどちらかが1であれば1を返す。

// ビット論理和(OR)
$or = $a | $b;
echo "ビット論理和 (OR): " . $or . "\n"; // 出力: 61 (0011 1101 in binary)

^: ビット排他的論理和。対応するビットが異なれば1を返す。

// ビット排他的論理和(XOR)
$xor = $a ^ $b;
echo "ビット排他的論理和 (XOR): " . $xor . "\n"; // 出力: 49 (0011 0001 in binary)

~: ビット反転。ビットを反転。

// ビット反転(NOT)
$not = ~$a;
echo "ビット反転 (NOT): " . $not . "\n"; // 出力: -61 (反転後のビット列)

<<: ビット左シフト。ビットを左にシフト。

// ビット左シフト(<<)
$leftShift = $a << 2;
echo "ビット左シフト (<<): " . $leftShift . "\n"; // 出力: 240 (1111 0000 in binary)

>>: ビット右シフト。ビットを右にシフト。

// ビット右シフト(>>)
$rightShift = $a >> 2;
echo "ビット右シフト (>>): " . $rightShift . "\n"; // 出力: 15 (0000 1111 in binary)

三項演算子(?:

三項演算子(?:)は、条件式の結果に応じて値を返す。
形式は 条件式 ? 真の場合の値 : 偽の場合の値

<?php
$a = 10;
$b = ($a > 5) ? "大きい" : "小さい";
echo $b; // 出力: 大きい
?>

Null 合体演算子(??

Null 合体演算子(??)は、左側のオペランドが null の場合に右側のオペランドを返す。左側が null でない場合は、左側の値を返す。

<?php
$a = null;
$b = $a ?? "デフォルト";
echo $b; // 出力: デフォルト
?>

制御構文

if文

if 文は、条件が真の場合に特定のコードブロックを実行するために使用する。
elseelseif を使って、複数の条件を扱うこともできる。

if (条件) {
    // 条件が真の場合に実行されるコード
} elseif (別の条件) {
    // 追加の条件が真の場合に実行されるコード
} else {
    // どの条件も満たさない場合に実行されるコード
}

switch 文

switch文は、式の値に基づいて複数の条件を評価し、一致するcaseラベルのコードを実行する。
switch文はbreakを使用して各caseから脱出する。
defaultラベルは、どのcaseにも一致しない場合に実行されるコードブロックを指定する。

<?php
switch () {
    case1:
        // 値1が式の結果と一致する場合に実行されるコード
        break;
    case2:
        // 値2が式の結果と一致する場合に実行されるコード
        break;
    // 必要に応じて追加のcase
    default:
        // どのcaseにも一致しない場合に実行されるコード
}
?>

match文

match 文は、PHP 8.0 以降で導入された構文で、switch 文の代わりに使う。

$変数 = match (比較対象) {1 => 結果1,2 => 結果2,
    // 他のケース
    default => デフォルト結果,
};

for文

for 文は、指定された回数だけコードブロックを繰り返すために使用する。

for (初期化; 条件; 増減) {
    // 条件が真の場合に実行されるコード
}

foreach文

foreach 文は、配列やオブジェクトの各要素に対してコードブロックを実行するために使用する。

foreach ($配列 as $要素) {
    // 各要素に対して実行されるコード
}

キーと値: 連想配列の場合、キーと値の両方にアクセスすることもできる。

<?php
$person = array("first_name" => "John", "last_name" => "Doe");

foreach ($person as $key => $value) {
    echo $key . ": " . $value . " "; // 出力: first_name: John last_name: Doe
}
?>

配列

PHPの配列は、複数の値を1つの変数に格納できるデータ構造。
配列の要素はインデックスまたはキーでアクセスできる。
PHPでは、配列は数値配列と連想配列の2種類がある。

数値配列

数値インデックス(0から始まる整数値)を使用して要素にアクセスする配列です。

$array = array(value1, value2, value3, ...);

連想配列

キーとして文字列を使用して要素にアクセスする配列です。

$array = array("key1" => value1, "key2" => value2, ...);

関数

文字列操作関数

strlen($string)

文字列の長さを取得する。

$text = "Hello, world!";
echo strlen($text); // 13

strpos($haystack, $needle)

文字列内で部分文字列の最初の出現位置を特定する。

$text = "Hello, world!";
echo strpos($text, "world"); // 7

substr($string, $start, $length)

文字列の一部分を返す。

$text = "Hello, world!";
echo substr($text, 7, 5); // world

str_replace($search, $replace, $subject)

文字列内の全ての一致する部分文字列を置換する。

$text = "Hello, world!";
echo str_replace("world", "PHP", $text); // Hello, PHP!

trim($string)

文字列の先頭および末尾から空白文字を取り除く。

$text = "  Hello, world!  ";
echo trim($text); // "Hello, world!"

配列操作関数

array_merge($array1, $array2)

2つの配列をマージする。

$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$result = array_merge($array1, $array2);
print_r($result); // [1, 2, 3, 4, 5, 6]

array_diff($array1, $array2)

2つの配列の差異を計算する。

$array1 = [1, 2, 3, 4];
$array2 = [2, 4, 6];
$result = array_diff($array1, $array2);
print_r($result); // [1, 3]

array_map($callback, $array)

配列の各要素にコールバック関数を適用する。

$array = [1, 2, 3, 4];
$result = array_map(function($num) {
    return $num * 2;
}, $array);
print_r($result); // [2, 4, 6, 8]

array_filter($array, $callback)

コールバック関数で評価された要素のみを返す。

$array = [1, 2, 3, 4, 5];
$result = array_filter($array, function($num) {
    return $num % 2 === 0;
});
print_r($result); // [2, 4]

array_keys($array)

配列の全てのキーを返す。

$array = ['a' => 1, 'b' => 2, 'c' => 3];
$result = array_keys($array);
print_r($result); // ['a', 'b', 'c']

array_push($array, $value)

配列の末尾に1つ以上の要素を追加する。

$numbers = array(1, 2);
array_push($numbers, 3, 4);
print_r($numbers); // [1, 2, 3, 4]

array_pop($array)

配列の末尾から1つの要素を削除し、その値を返す。

$numbers = array(1, 2, 3);
$last = array_pop($numbers);
echo $last; // 3
print_r($numbers); // [1, 2]

array_shift($array)

配列の先頭から1つの要素を削除し、その値を返す。

$numbers = array(1, 2, 3);
$first = array_shift($numbers);
echo $first; // 1
print_r($numbers); // [2, 3]

array_unshift($array, $value)

配列の先頭に1つ以上の要素を追加する。

$numbers = array(2, 3);
array_unshift($numbers, 1);
print_r($numbers); // [1, 2, 3]

array_slice($array, $offset, $length = null, $preserve_keys = false)

配列の一部分を返す。

$numbers = array(1, 2, 3, 4, 5);
$subset = array_slice($numbers, 2, 2);
print_r($subset); // [3, 4]

array_splice($array, $offset, $length = null, $replacement = array())

配列の指定した位置に要素を追加または削除する。

$numbers = array(1, 2, 3, 4, 5);
array_splice($numbers, 2, 2, array(6, 7));
print_r($numbers); // [1, 2, 6, 7, 5]

in_array($needle, $haystack, $strict = false)

配列内に特定の値が存在するかどうかを確認する。

$numbers = array(1, 2, 3, 4, 5);
$exists = in_array(3, $numbers);
echo $exists ? 'true' : 'false'; // true

array_key_exists($key, $array)

配列に特定のキーが存在するかどうかを確認する。

$person = array("first_name" => "John", "last_name" => "Doe");
$exists = array_key_exists("first_name", $person);
echo $exists ? 'true' : 'false'; // true

array_values($array)

配列の全ての値を返す。

$person = array("first_name" => "John", "last_name" => "Doe");
$values = array_values($person);
print_r($values); // ['John', 'Doe']

sort($array, $sort_flags = SORT_REGULAR)

配列を昇順にソートする。

$numbers = array(3, 1, 4, 1, 5, 9);
sort($numbers);
print_r($numbers); // [1, 1, 3, 4, 5, 9]

rsort($array, $sort_flags = SORT_REGULAR)

配列を降順にソートする。

$numbers = array(3, 1, 4, 1, 5, 9);
rsort($numbers);
print_r($numbers); // [9, 5, 4, 3, 1, 1]

asort($array, $sort_flags = SORT_REGULAR)

配列を値に基づいて昇順にソートし、キーを保持する。

$person = array("a" => 3, "b" => 1, "c" => 2);
asort($person);
print_r($person); // ['b' => 1, 'c' => 2, 'a' => 3]

ksort($array, $sort_flags = SORT_REGULAR)

配列をキーに基づいて昇順にソートする。

$person = array("b" => 1, "a" => 3, "c" => 2);
ksort($person);
print_r($person); // ['a' => 3, 'b' => 1, 'c' => 2]

array_reduce($array, $callback, $initial = null)

配列の要素を反復処理し、1つの値に縮約する。

$numbers = array(1, 2, 3);
$sum = array_reduce($numbers, function($carry, $item) {
    return $carry + $item;
}, 0);
echo $sum; // 6

日付と時刻操作関数

date($format, $timestamp)

指定されたフォーマットで日付を返す。

echo date('Y-m-d'); // 現在の日付を "YYYY-MM-DD" 形式で表示

strtotime($time, $now)

文字列をUnixタイムスタンプに変換する。

$timestamp = strtotime('2024-12-31');
echo date('Y-m-d', $timestamp); // 2024-12-31

time()

現在のUnixタイムスタンプを返す。

echo time(); // 現在のUnixタイムスタンプ

mktime($hour, $minute, $second, $month, $day, $year)

指定された日時のUnixタイムスタンプを返す。

$timestamp = mktime(0, 0, 0, 12, 31, 2024);
echo date('Y-m-d', $timestamp); // 2024-12-31

ファイルシステム関数

fopen($filename, $mode)

ファイルを開く

$handle = fopen('example.txt', 'r');
if ($handle) {
    // ファイル操作
    fclose($handle);
}

fwrite($handle, $string)

ファイルを書き込む

$handle = fopen('example.txt', 'w');
fwrite($handle, 'Hello, world!');
fclose($handle);

fread($handle, $length)

ファイルからデータを読み取る。

$handle = fopen('example.txt', 'r');
$content = fread($handle, filesize('example.txt'));
fclose($handle);
echo $content;

fclose($handle)

ファイルを閉じる。

$handle = fopen('example.txt', 'r');
// ファイル操作
fclose($handle);

file_get_contents($filename)

ファイル全体を文字列として読み込む。

$content = file_get_contents('example.txt');
echo $content;

数学関数

abs($number)

絶対値を返す。

echo abs(-5); // 5

round($val, $precision)

指定した精度で数値を丸める。

echo round(3.14159, 2); // 3.14

max($array)

配列の最大値を返す。

$array = [1, 2, 3, 4, 5];
echo max($array); // 5

min($array)

配列の最小値を返す。

$array = [1, 2, 3, 4, 5];
echo min($array); // 1

rand($min, $max)

乱数を生成する。

echo rand(1, 10); // 1から10の間のランダムな数

セッション関数

session_start()

新しいセッションを開始または既存のセッションを再開する。

session_start();
$_SESSION['user'] = 'John Doe';

session_destroy()

セッションを破棄する。

session_start();
session_destroy();

$_SESSION

現在のセッションに関連する変数を格納する。

session_start();
$_SESSION['user'] = 'John Doe';
echo $_SESSION['user']; // John Doe

エラーハンドリング関数

error_reporting($level)

エラーレポートのレベルを設定する。

error_reporting(E_ALL);

set_error_handler($callback)

ユーザー定義のエラーハンドラを設定する。

set_error_handler(function($errno, $errstr) {
    echo "Error [$errno]: $errstr";
});

trigger_error($message, $type)

ユーザー定義のエラーを生成する。

trigger_error("This is a custom error.", E_USER_WARNING);

その他の関数

isset($var)

変数が設定されているかどうかを調べる。

$var = 'Hello';
echo isset($var); // true

empty($var)

変数が空かどうかを調べる。

$var = '';
echo empty($var); // true

include($file)

指定されたファイルをインクルードする。

include 'header.php';

require($file)

指定されたファイルをインクルードする(致命的なエラーを発生させる)。

require 'config.php';

Discussion