📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「__FORCETOC__」を「{{#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 pag… |
|||
| (同じ利用者による、間の5版が非表示) | |||
| 140行目: | 140行目: | ||
なお、引数とは異なり、戻り値として指定できる値は1つのみである。<br> | なお、引数とは異なり、戻り値として指定できる値は1つのみである。<br> | ||
ただし、戻り値として配列も指定できるため、配列を返すことで実質的に複数の値を返すことも可能である。<br> | ただし、戻り値として配列も指定できるため、配列を返すことで実質的に複数の値を返すことも可能である。<br> | ||
<br><br> | |||
== 可変長引数 == | |||
可変長引数を持つ関数を定義することができる。<br> | |||
<br> | |||
可変長引数は配列として関数内で扱われる。<br> | |||
<u>通常の引数と組み合わせる場合、可変長引数は必ず最後に定義する必要がある。</u><br> | |||
<br> | |||
これには、主に2つの方法がある。<br> | |||
* <code>...</code> (スプラット演算子 / 可変引数演算子) を使用する方法 (PHP 5.6以降) | |||
*: ...演算子を使用する方法が推奨される。 | |||
* <code>func_get_args</code>関数を使用する方法 (従来の方法) | |||
<br> | |||
また、型宣言も使用可能である。<br> | |||
<syntaxhighlight lang="php"> | |||
// 型宣言の例 | |||
function sum(int ...$numbers) | |||
</syntaxhighlight> | |||
<br> | |||
* ...演算子を使用する場合 | |||
<syntaxhighlight lang="php"> | |||
function sum(...$numbers) | |||
{ | |||
$total = 0; | |||
foreach ($numbers as $number) { | |||
$total += $number; | |||
} | |||
return $total; | |||
} | |||
// 使用例 | |||
echo sum(1, 2, 3, 4, 5); // 出力: 15 | |||
echo sum(10, 20); // 出力: 30 | |||
</syntaxhighlight> | |||
<br> | |||
* func_get_args関数を使用する場合 | |||
<syntaxhighlight lang="php"> | |||
function multiply() | |||
{ | |||
$numbers = func_get_args(); | |||
$result = 1; | |||
foreach ($numbers as $number) { | |||
$result *= $number; | |||
} | |||
return $result; | |||
} | |||
// 使用例 | |||
echo multiply(2, 3, 4); // 出力: 24 | |||
echo multiply(5, 10); // 出力: 50 | |||
</syntaxhighlight> | |||
<br> | |||
また、通常の引数と可変長引数を組み合わせることもできる。<br> | |||
<syntaxhighlight lang="php"> | |||
function greet($greeting, ...$names) | |||
{ | |||
foreach ($names as $name) { | |||
echo "$greeting, $name!\n"; | |||
} | |||
} | |||
// 使用例 | |||
greet("Hello", "Alice", "Bob", "Charlie"); | |||
// 出力 | |||
Hello, Alice! | |||
Hello, Bob! | |||
Hello, Charlie! | |||
</syntaxhighlight> | |||
<br><br> | |||
== グローバル変数の使用 == | |||
PHPのスコープルールにおいて、グローバルスコープで定義された変数は、関数の内部からは自動的にはアクセスできない。<br> | |||
これはPHPの<u>変数スコープの分離</u>という特徴によるものである。<br> | |||
<br> | |||
関数内でグローバル変数を使用する場合は、以下に示すいずれかの方法を使用する必要がある。<br> | |||
* globalキーワードを使用する方法 | |||
<syntaxhighlight lang="php"> | |||
$hoge = 1; | |||
function func1() | |||
{ | |||
global $hoge; // グローバル変数を関数内で使用することを宣言 | |||
echo "$hoge"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
* $GLOBALS配列を使用する方法 | |||
<syntaxhighlight lang="php"> | |||
$hoge = 1; | |||
function func1() | |||
{ | |||
echo "$GLOBALS['hoge']"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>グローバル変数の使用は避け、代わりに引数として値を渡すことが推奨される。</u><br> | |||
<u>これにより、関数の依存関係が明確になり、テストや保守が容易になる。</u><br> | |||
<u>ソースコードの予測可能性と再利用性も向上する。</u><br> | |||
<br><br> | |||
== 参照渡し == | |||
参照渡しとは、変数のメモリアドレスを直接渡すことにより、関数内で値を変更すると呼び出し元の変数の値も変更される仕組みである。<br> | |||
<br> | |||
関数の引数の前に&を付加することにより参照渡しになる。<br> | |||
<br> | |||
* 特に大きな配列やオブジェクトを扱う場合、メモリ使用量を節約できる場合がある。 | |||
* 複数の値を同時に変更する場合に便利である。 | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 参照渡し | |||
function addFiveByRef(&$num) | |||
{ | |||
$num += 5; | |||
} | |||
$value = 10; | |||
addFiveByRef($value); | |||
echo $value; // 15 (元の値が変更される) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 配列の要素を全て2倍にする関数 | |||
function doubleArrayValues(&$arr) | |||
{ | |||
foreach ($arr as &$value) { | |||
$value *= 2; | |||
} | |||
} | |||
$numbers = [1, 2, 3, 4, 5]; | |||
doubleArrayValues($numbers); | |||
print_r($numbers); // [2, 4, 6, 8, 10] | |||
</syntaxhighlight> | |||
<br> | |||
参照渡しは、以下に示すような場合に使用することを推奨する。<br> | |||
* 大きなデータ構造を扱う時のパフォーマンス最適化 | |||
* 複数の値を同時に変更する必要がある時 | |||
* オブジェクトのメソッドチェーンを実装する時 | |||
<br><br> | <br><br> | ||
| 146行目: | 292行目: | ||
外部のPHPファイルの関数を呼び出す前に、上記の関数を使用して外部ファイルを読み込むことにより、外部のPHPファイルの関数を呼び出すことができる。<br> | 外部のPHPファイルの関数を呼び出す前に、上記の関数を使用して外部ファイルを読み込むことにより、外部のPHPファイルの関数を呼び出すことができる。<br> | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
// index.phpファイル | |||
<?php | <?php | ||
| 159行目: | 305行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
// utils.phpファイル | |||
<?php | <?php | ||
| 184行目: | 330行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== コールバック関数 == | |||
コールバック関数の定義を以下に示す。<br> | |||
* 関数の引数としてcallable型を指定。 | |||
* 文字列で関数名を渡す。 | |||
* 既存の関数を参照として渡す。 | |||
<br> | |||
コールバック関数のメリットを以下に示す。<br> | |||
* コードの再利用性が高まる。 | |||
* 柔軟な処理の実装が可能 | |||
* コードの可読性が向上する。 | |||
<br> | |||
使用場面を以下に示す。<br> | |||
* 配列操作 | |||
*: array_map関数、array_filter関数、array_reduce関数 | |||
* イベントハンドラ | |||
* コールバックベースのAPI | |||
* データの変換や加工 | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
function processNumbers(array $numbers, callable $callback) | |||
{ | |||
$result = []; | |||
foreach ($numbers as $number) { | |||
$result[] = $callback($number); | |||
} | |||
return $result; | |||
} | |||
// コールバック関数の定義 | |||
function double($n) | |||
{ | |||
return $n * 2; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// コールバック関数の使用例 | |||
$numbers = [1, 2, 3, 4, 5]; | |||
$doubled = processNumbers($numbers, 'double'); | |||
print_r($doubled); // [2, 4, 6, 8, 10] | |||
</syntaxhighlight> | |||
<br><br> | |||
== ラムダ式 (無名関数) == | |||
ラムダ式 (無名関数) の特徴を以下に示す。<br> | |||
* <u>function() {}</u>構文を使用する。 | |||
* 変数に代入可能である。 | |||
* その場で定義して使用できる。 | |||
* <code>use</code>キーワードで外部のスコープの変数を取り込める。 | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// コールバック関数 | |||
function processNumbers(array $numbers, callable $callback) | |||
{ | |||
$result = []; | |||
foreach ($numbers as $number) { | |||
$result[] = $callback($number); | |||
} | |||
return $result; | |||
} | |||
// ラムダ式 (無名関数) の例 | |||
$triple = function($n) { | |||
return $n * 3; | |||
}; | |||
// 一般的なラムダ式の使用 | |||
$tripled = processNumbers($numbers, $triple); | |||
print_r($tripled); // 出力 : [3, 6, 9, 12, 15] | |||
// インラインでのラムダ式の使用 | |||
$squared = processNumbers($numbers, function($n) { | |||
return $n * $n; | |||
}); | |||
print_r($squared); // [1, 4, 9, 16, 25] | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、useキーワードを使用したクロージャを定義している。<br> | |||
<syntaxhighlight lang="php"> | |||
// コールバック関数 | |||
function processNumbers(array $numbers, callable $callback) | |||
{ | |||
$result = []; | |||
foreach ($numbers as $number) { | |||
$result[] = $callback($number); | |||
} | |||
return $result; | |||
} | |||
$multiplier = 4; | |||
$multiplied = processNumbers($numbers, function($n) use ($multiplier) { | |||
return $n * $multiplier; | |||
}); | |||
print_r($multiplied); // 出力 : [4, 8, 12, 16, 20] | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、array_map関数の引数としてラムダ式を使用している。<br> | |||
ラムダ式の部分をコールバック関数として使用することもできる。<br> | |||
<syntaxhighlight lang="php"> | |||
// 配列操作の実践的な例 | |||
$users = [ | |||
['name' => 'Tanaka', 'age' => 25], | |||
['name' => 'Suzuki', 'age' => 30], | |||
['name' => 'Sato', 'age' => 20] | |||
]; | |||
// array_map関数でラムダ式を使用 | |||
$names = array_map(function($user) { | |||
return $user['name']; | |||
}, $users); | |||
print_r($names); // 出力 : ['Tanaka', 'Suzuki', 'Sato'] | |||
// array_filter関数でコールバックを使用 | |||
$adults = array_filter($users, function($user) { | |||
return $user['age'] >= 25; | |||
}); | |||
print_r($adults); // 25歳以上のみ出力 | |||
</syntaxhighlight> | |||
<br><br> | |||
{{#seo: | {{#seo: | ||