📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の10版が非表示) | |||
| 57行目: | 57行目: | ||
== 変数のデータ型 == | == 変数のデータ型 == | ||
==== データ型の概要 ==== | |||
数値や文字列等の値にはデータ型が存在するが、PHPの変数はどのデータ型でも同じように格納することができる。<br> | 数値や文字列等の値にはデータ型が存在するが、PHPの変数はどのデータ型でも同じように格納することができる。<br> | ||
そのため、変数の型を宣言する必要はない。<br> | そのため、変数の型を宣言する必要はない。<br> | ||
| 81行目: | 82行目: | ||
$var = 180; | $var = 180; | ||
print '[値]'.$var.','; | print '[値]'.$var.','; | ||
print '[型]'.gettype($var) | print '[型]'.gettype($var).'<br />'; | ||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
==== 整数 ==== | |||
===== 最大値 / 最小値 ===== | |||
最大値および最小値は、AMD64またはx86環境により依存することに注意する。<br> | |||
<br> | |||
PHPでは、オーバーフローまたはアンダーフローを引き起こしてもプログラムはエラーにならない。<br> | |||
特に、ユーザが⼊⼒した数値においては、必ず範囲内に収まっているかどうかを⼊⼒時にチェックする必要がある。<br> | |||
<syntaxhighlight lang="php"> | |||
// 整数の最⼤値 | |||
$intmax = PHP_INT_MAX; | |||
var_dump($max); | |||
// 整数の最⼩値 | |||
$intmin = PHP_INT_MIN; // PHP 7.0以降使用可能 | |||
var_dump($min); | |||
</syntaxhighlight> | |||
<br> | |||
===== 累乗 ===== | |||
<syntaxhighlight lang="php"> | |||
// PHP 5.5以前は、pow関数を使用する必要がある | |||
var_dump(pow(2, 3)); | |||
// PHP 5.6以降は、**演算⼦および^演算子が使用できる | |||
var_dump(2 ** 3); | |||
var_dump(2 ^ 3); | |||
// 数値でない値を累乗計算する場合は、警告が発⽣する | |||
var_dump('a' ** 3); | |||
</syntaxhighlight> | |||
<br> | |||
===== 2進数 8進数 16進数 ===== | |||
以下に示すようなものに利⽤されている。<br> | |||
* 16進数の例 : HTMLのカラーコード | |||
* 8進数の例 : Linuxにおけるファイルのパーミッション | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
$a = 0b111; // 2進数 : 先頭に0bを付加する | |||
var_dump($a); // int(7) | |||
$b = 012; // 8進数 : 先頭に0を付加する | |||
var_dump($b); // int(10) | |||
$c = 0x1A; // 16進数 : 先頭に0xを付加する | |||
var_dump($c); // int(26) | |||
</syntaxhighlight> | |||
<br> | |||
==== 浮動⼩数点数 ==== | |||
===== 浮動小数点の概要 ===== | |||
浮動⼩数点数は、⼩数を含めた数を表現できる型である。<br> | |||
浮動小数点数(float型)のサイズは、AMD64またはx86により依存する。<br> | |||
一般的に、10進数で14桁の精度があり、<u>AMD64での最大値は約1.8e308</u> (IEEE 854) となる。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
$number = 3.14; // 値 : 3.14 | |||
echo $number. PHP_EOL; | |||
$number = 3.14e5; // 値 : 314000 | |||
echo $number. PHP_EOL; | |||
$number = 1_234.567; // PHP 7.4以降は、_(アンダーバー)が使用できる | |||
if (is_float($number)) print "number is float" . PHP_EOL; | |||
else if (is_double($number)) print "number is double" . PHP_EOL; | |||
</syntaxhighlight> | |||
<br> | |||
===== 浮動小数点のキャスト ===== | |||
<code>floatval</code>関数 / <code>doubleval</code>関数は、他のデータ型から浮動小数点型に変換する。<br> | |||
どちらも同様の機能であるが、<code>floatval</code>関数を使用した方がよい。<br> | |||
<syntaxhighlight lang="php"> | |||
$num = "100"; // 文字列型として宣言 | |||
$num1 = floatval($num); | |||
echo gettype($num1). PHP_EOL; // floatと出力 | |||
$num2 = doubleval($num); | |||
echo gettype($num2). PHP_EOL; // doubleと出力 | |||
</syntaxhighlight> | |||
<br> | |||
変換の型を指定して明示的に変換する。<br> | |||
どちらも同様の機能であるが、float型としてキャストした方がよい。<br> | |||
<syntaxhighlight lang="php"> | |||
$num = "3.14"; // 文字列型として宣言 | |||
$num1 = (float)$num; | |||
echo gettype($num1). PHP_EOL; // floatと出力 | |||
$num2 = (double)$num; | |||
echo gettype($num2). PHP_EOL; // doubleと出力 | |||
</syntaxhighlight> | |||
<br> | |||
その他のデータ型から浮動小数点にキャストする。<br> | |||
このキャスト結果は、整数型とほぼ同じである。<br> | |||
<syntaxhighlight lang="php"> | |||
var_dump((float)"aaa"); // キャストの結果 : 0 (文字列の場合は、全て0となる) | |||
var_dump((float)"999aaa"); // キャストの結果 : 999 (文字列 + 数値の場合は、文字の部分が削除されてキャストされる) | |||
var_dump((float)"123"); // キャストの結果 : 123 | |||
var_dump((float)"999.99"); // キャストの結果 : 999.99 | |||
var_dump((float)"4E2"); // キャストの結果 : 400 | |||
var_dump((float)true); // キャストの結果 : 1 | |||
var_dump((float)false); // キャストの結果 : 0 | |||
var_dump((float)null); // キャストの結果 : 0 | |||
</syntaxhighlight> | |||
<br> | |||
==== NaN ==== | |||
数値演算の結果が定数NaNで表される値になることがある。<br> | |||
この定数は、浮動小数点演算における未定義の値あるいは表現不能な値を表す。<br> | |||
<br> | |||
この値を他の値と比較すると、緩やかな比較および厳密な比較のいずれでも結果は<code>false</code>となる。<br> | |||
<br> | |||
NaNは様々な値の数を表すものであり、NaNを他の値と比較してはならない。<br> | |||
NaNの確認を行う場合は、<code>is_nan</code>関数を使用する。<br> | |||
<br> | |||
==== 文字列 ==== | |||
===== 文字列の概要 ===== | |||
Webプログラミングでは、⽂字列を頻繁に使用する。<br> | |||
ユーザ名、メールアドレス、住所等、対象とする⽂字列は様々である。<br> | |||
<br> | |||
PHPでは、AMD64環境では⽂字数の⻑さに制限がない。<br> | |||
x86環境では、⽂字列の最⼤⻑は2[GB]が上限となる。<br> | |||
<br> | |||
ただし、⻑い⽂字列を⽣成するとメモリが不⾜してメモリーオーバーを引き起こし、プログラムは異常終了することに注意する。<br> | |||
<br> | |||
===== 全⾓文字 ===== | |||
⽇本語を1⽂字として判定したい場合は、<code>mb_strlen</code>関数を使⽤する。<br> | |||
その他にも、マルチバイトを考慮して⽂字列を判定する関数が存在する。<br> | |||
<syntaxhighlight lang="php"> | |||
// マルチバイト文字を考慮した⽂字数 | |||
$a = 'あいうえお' | |||
echo mb_strlen($a). PHP_EOL; // 出力 : 5 | |||
</syntaxhighlight> | |||
<br> | |||
===== 半⾓文字と全⾓文字の組み合わせ ===== | |||
<code>mb_convert_kana</code>関数による⽂字列の変換は、⽇本語を扱う上で重要である。<br> | |||
PHP 8.2以降では、オプションの組み合わせが無効な場合、例外<code>ValueError</code>がスローされる。<br> | |||
<br> | |||
以下の例では、<code>mb_convert_kana</code>関数の第2引数において、次に示す変換をしている。<br> | |||
* K | |||
*: 半⾓カタカナを全⾓カタカナに変換する。 | |||
* a | |||
*: 全⾓英数字を半⾓英数字に変換する。 | |||
* s | |||
*: 全⾓スペースを半⾓スペースに変換する。 | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ 使用可能な変換オプション | |||
|- | |||
! style="background-color:#66CCFF;" | オプション | |||
! style="background-color:#66CCFF;" | 説明 | |||
|- | |||
| r || 全角英字を半角英字に変換する。 | |||
|- | |||
| R || 半角英字を全角英字に変換する。 | |||
|- | |||
| n || 全角数字を半角数字に変換する。 | |||
|- | |||
| N || 半角数字を全角数字に変換する。 | |||
|- | |||
| a || 全角英数字を半角数字に変換する。 | |||
|- | |||
| A || 半角英数字を全角英数字に変換する。<br>(<code>a</code>オプション、<code>A</code>オプションに含まれる文字は、U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲である) | |||
|- | |||
| s || 全角スペースを半角スペースに変換する。<br>(U+3000 -> U+0020) | |||
|- | |||
| S || 半角スペースを全角スペースに変換する。<Br>(U+0020 -> U+3000) | |||
|- | |||
| k || 全角カタカナを半角カタカナに変換する。 | |||
|- | |||
| K || 半角カタカナを全角カタカナに変換する。 | |||
|- | |||
| h || 全角ひらがなを半角カタカナに変換する。 | |||
|- | |||
| H || 半角カタカナを全角ひらがなに変換する。 | |||
|- | |||
| c || 全角カタカナを全角ひらがなに変換する。 | |||
|- | |||
| C || 全角ひらがなを全角カタカナに変換する。 | |||
|- | |||
| V || 濁点付きの文字を一文字に変換する。<br><br><u>※注意</u><br><u>このオプションは、<code>K</code>オプション、または、<code>H</code>オプションと共に使用する必要がある。</u> | |||
|} | |||
</center> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// ⽇本語⽂字列の変換 | |||
// (変換前)全⾓の1(全⾓スペース)あ(全⾓スペース)半⾓のイ | |||
$c = "1 あ イ"; | |||
// (変換後)半⾓の1(半⾓スペース)あ(半⾓スペース)全⾓のイ | |||
$d = mb_convert_kana($c, Kas); | |||
echo $c. PHP_EOL; // 1 あ イ | |||
echo $d. PHP_EOL; // 1 あ イ | |||
</syntaxhighlight> | |||
<br> | |||
これにより、半⾓文字と全⾓文字を統⼀する。<br> | |||
全⾓文字と半⾓文字が混ざる場合、正常に⽂字列の検索ができない状況が起きる。<br> | |||
また、カタカナを全⾓文字として統⼀することができるといった理由もある。<br> | |||
<br> | |||
例えば、Webページ上において、数値は半⾓で⼊⼒すると指定したとしても、全⾓文字として⼊⼒するユーザは多い。<br> | |||
そのため、全⾓文字と半⾓文字を統⼀することが重要である。<br> | |||
<br> | |||
Webで使用されている文字コードを、以下に示す。<br> | |||
* UTF-8 | |||
*: ほとんどのWebページで使用されている。 | |||
* ISO-2022-JP | |||
*: 過去には、電⼦メールで使用されることが多かった。 (現在では、ほとんどがUTF-8である) | |||
* SHIFT-JIS (SJIS) | |||
*: 主に、フィーチャーフォン(ガラケー)向けのモバイルサイトで使用されている。 | |||
<br><br> | <br><br> | ||
| 152行目: | 361行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== 変数展開 == | |||
文字列をダブルクオーテーションで囲む場合やヒアドキュメントの場合、文字列に変数が存在する時、変数は格納されている値に置換される。<br> | |||
このような処理を変数展開と呼ぶ。<br> | |||
<br> | |||
以下の例では、文字列に変数nameが記述されている。<br> | |||
この文字列を出力する時、"こんにちは。高橋 さん"と変数に格納されている値に置き換えて出力される。<br> | |||
<syntaxhighlight lang="php"> | |||
$name = '高橋'; | |||
echo "こんにちは。$name さん"; | |||
</syntaxhighlight> | |||
<br> | |||
変数展開において、変数が記述された位置の後ろにアルファベットが続く場合は、どこまでが変数名なのか区別できない場合がある。<br> | |||
以下の例では、変数colornamecolorを変数展開されてしまう。<br> | |||
<syntaxhighlight lang="php"> | |||
$colorname = 'red'; | |||
echo "frame is $colornamecolor"; | |||
</syntaxhighlight> | |||
<br> | |||
このように、どこまでが変数名なのか区別できない場合や配列変数等を使用する場合は、変数名を<code>{}</code>で囲んで記述する。<br> | |||
<syntaxhighlight lang="php"> | |||
$colorname = 'red'; | |||
echo "frame is ${colorname}color"; | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>シングルクオーテーションで囲んだ文字列で変数を記述しても、変数展開は行われない。</u><br> | |||
<br><br> | |||
== 変数の削除 == | |||
==== unset関数 ==== | |||
unset関数は、変数や配列の要素を破棄するための関数である。<br> | |||
<br> | |||
<u>これは、nullを代入するのとは異なり、変数そのものを削除することに注意する。</u><br> | |||
変数を完全に破棄するため、メモリが解放される。<br> | |||
<br> | |||
最も一般的な使用方法は、単純な変数の破棄である。<br> | |||
<syntaxhighlight lang="php"> | |||
$name = "John"; | |||
unset($name); // $nameという変数が破棄される | |||
// 複数の変数を同時に解除 | |||
$a = 1; | |||
$b = 2; | |||
unset($a, $b); // 複数の変数を1度に破棄することもできる | |||
// unset後にisset関数で確認する場合、falseを返す | |||
isset($a) | |||
</syntaxhighlight> | |||
<br> | |||
配列の場合、特定の要素を削除することができる。<br> | |||
<u>ただし、要素を削除しても配列のインデックスは自動的には詰められない。</u><br> | |||
<syntaxhighlight lang="php"> | |||
$fruits = ["apple", "banana", "orange"]; | |||
unset($fruits[1]); // "banana"が削除される | |||
// 結果: array(0 => "apple", 2 => "orange") | |||
</syntaxhighlight> | |||
<br> | |||
また、セッション変数を破棄することもできる。<br> | |||
例えば、ユーザのログアウト処理等で使用されることが多い。<br> | |||
<syntaxhighlight lang="php"> | |||
unset($_SESSION['user_id']); // 特定のセッション変数を破棄 | |||
</syntaxhighlight> | |||
<br> | |||
オブジェクトのプロパティを削除することもできる。<br> | |||
<syntaxhighlight lang="php"> | |||
class User { | |||
public $name; | |||
} | |||
$user = new User(); | |||
$user->name = "John"; | |||
unset($user->name); // プロパティを削除 | |||
</syntaxhighlight> | |||
<br> | |||
関数内でグローバル変数をunsetする場合は、<code>global</code>キーワードを使用しない限り、関数内でのunsetはローカルスコープにのみ影響を与える。<br> | |||
<syntaxhighlight lang="php"> | |||
$global_var = "test"; | |||
function removeGlobal() { | |||
global $global_var; // globalキーワードが必要 | |||
unset($global_var); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
大規模なアプリケーションでメモリ管理を最適化する場合にunset関数が重要な役割を果たす。<br> | |||
特に、大きな配列やオブジェクトを扱う場合、不要になったデータを適切にunsetすることにより、メモリ使用量を抑えることができる。<br> | |||
<br> | |||
==== array_splice関数 ==== | |||
なお、配列の要素を削除する場合の代替手段として、array_splice関数がある。<br> | |||
<u>これは、インデックスを自動的に詰めることができる。</u><br> | |||
<syntaxhighlight lang="php"> | |||
$array = [1, 2, 3]; | |||
// 出力: [1, 3] | |||
array_splice($array, 1, 1); // インデックスを詰めて削除 | |||
</syntaxhighlight> | |||
<br> | |||
配列の要素を削除するだけでなく、置換、挿入等の様々な配列操作に柔軟に対応できる便利な関数である。<br> | |||
unset関数と異なり、インデックスが自動的に詰められる特徴があるため、連続したインデックスを維持したい場合に特に有効である。<br> | |||
<br> | |||
array_splice関数の基本的な構文を以下に示す。<br> | |||
<syntaxhighlight lang="php"> | |||
// 基本的な構文 | |||
array_splice(array &$array, int $offset [, int $length = null [, mixed $replacement = array() ]]); | |||
</syntaxhighlight> | |||
<br> | |||
* 第1引数 | |||
*: 操作対象の配列 | |||
*: 参照渡しで渡すため、元の配列が直接変更される。 | |||
*: <syntaxhighlight lang="php"> | |||
$fruits = ['apple', 'banana', 'orange', 'grape']; | |||
array_splice($fruits, 2); // 配列fruitsが直接変更される | |||
</syntaxhighlight> | |||
*: <br> | |||
* 第2引数 | |||
*: 変更を開始する位置を指定する。 | |||
*: 正の数の場合は配列の先頭、負の数の場合は末尾からカウントする。 | |||
*: <syntaxhighlight lang="php"> | |||
$colors = ['red', 'blue', 'green', 'yellow']; | |||
array_splice($colors, 1); // 先頭から1番目以降を削除 | |||
// 出力: ['red'] | |||
array_splice($colors, -2); // 末尾から2つを削除 | |||
// 出力: ['red', 'blue'] | |||
</syntaxhighlight> | |||
*: <br> | |||
* 第3引数 | |||
*: 省略可能 | |||
*: 削除する要素の数を指定する。 | |||
*: 省略する場合は、開始位置から配列の末尾まで全ての要素が対象となる。 | |||
*: <syntaxhighlight lang="php"> | |||
$numbers = [1, 2, 3, 4, 5]; | |||
array_splice($numbers, 1, 2); // 1番目の位置から2つの要素を削除 | |||
// 結果: [1, 4, 5] | |||
</syntaxhighlight> | |||
*: <br> | |||
* 第4引数 | |||
*: 省略可能 | |||
*: 削除した箇所に新しい要素を挿入できる。 | |||
*: <syntaxhighlight lang="php"> | |||
$pets = ['dog', 'cat', 'bird']; | |||
array_splice($pets, 1, 1, ['hamster', 'rabbit']); | |||
// 結果: ['dog', 'hamster', 'rabbit', 'bird'] | |||
</syntaxhighlight> | |||
<br> | |||
実際の使用例として、配列の特定の位置に要素を挿入する場合がある。<br> | |||
<syntaxhighlight lang="php"> | |||
$menu = ['coffee', 'tea', 'juice']; | |||
// lengthを0にすることで、要素の削除なしで挿入できる | |||
// 出力: ['coffee', 'latte', 'tea', 'juice'] | |||
array_splice($menu, 1, 0, 'latte'); | |||
</syntaxhighlight> | |||
<br> | |||
この関数の特徴は、削除された要素を戻り値として返すことである。<br> | |||
<syntaxhighlight lang="php"> | |||
$items = ['A', 'B', 'C', 'D']; | |||
$removed = array_splice($items, 1, 2); | |||
// $removedは ['B', 'C'] | |||
// $itemsは ['A', 'D'] | |||
</syntaxhighlight> | |||
<br><br> | |||
== Nullable型 == | |||
PHPの型宣言において、?<型名>の記法は、その変数がデータ型またはnullを許容することを示す。<br> | |||
これは、Nullable型と呼ばれ、PHP 7.1以降で導入された機能である。<br> | |||
<br> | |||
例えば、?string型は、string|nullと同じ意味になる。<br> | |||
また、デフォルト値として<code>null</code>を指定することができる。<br> | |||
<br> | |||
ただし、nullでない場合は、必ず文字列型である必要がある。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
function example(?string $section = null) | |||
{ | |||
if ($section === null) { | |||
// $sectionがnullの場合の処理 | |||
return "Section is null"; | |||
} | |||
// $sectionが文字列の場合の処理 | |||
return "Section is: " . $section; | |||
} | |||
// 両方とも有効な呼び出し | |||
echo example(null); // "Section is null" | |||
echo example("Chapter 1"); // "Section is: Chapter 1" | |||
</syntaxhighlight> | |||
<br><br> | |||
== スーパーグローバル変数 == | |||
スーパーグローバル変数は、スクリプトのどこからでもアクセスできる。<br> | |||
ただし、セキュリティ上の理由から、入力値は必ず適切なバリデーションやサニタイズを行ってから使用する必要がある。<br> | |||
<br> | |||
==== $_GET ==== | |||
URLパラメータからデータを取得する。<br> | |||
例: example.php?name=taroの場合、$_GET['name']は"taro"となる。<br> | |||
<br> | |||
==== $_POST ==== | |||
POSTメソッドで送信されたフォームデータを取得する。<br> | |||
ファイルアップロードやパスワード等、セキュアなデータ送信に使用する。<br> | |||
<br> | |||
==== $_SESSION ==== | |||
セッション変数を格納する。<br> | |||
ユーザのログイン状態管理等に使用する。<br> | |||
<br> | |||
==== $_COOKIE ==== | |||
クライアント側に保存されたCookie情報を取得する。<br> | |||
ユーザ設定の保存等に使用する。<br> | |||
<br> | |||
==== $_SERVER ==== | |||
サーバ情報やリクエストの詳細を取得する。<br> | |||
<br> | |||
主な要素<br> | |||
* $_SERVER['REQUEST_METHOD'] | |||
*: HTTPメソッド | |||
* $_SERVER['HTTP_USER_AGENT'] | |||
*: ブラウザ情報 | |||
* $_SERVER['REMOTE_ADDR'] | |||
*: クライアントのIPアドレス | |||
<br> | |||
==== $_FILES ==== | |||
アップロードされたファイルの情報を取得する。<br> | |||
ファイル名、サイズ、一時保存先等の情報を含む。<br> | |||
<br> | |||
==== $_REQUEST ==== | |||
$_GET、$_POST、$_COOKIEの内容を含む。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>セキュリティ上、直接的な使用は推奨されない。</u><br> | |||
<br> | |||
==== $_ENV ==== | |||
環境変数の値を取得する。<br> | |||
サーバ設定や環境設定値へのアクセスに使用する。<br> | |||
<br> | |||
==== $GLOBALS ==== | |||
グローバルスコープで定義された全ての変数を参照する。<br> | |||
他のスーパーグローバル変数も含む。<br> | |||
<br><br> | |||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Web]] | [[カテゴリ:Web]] | ||