4日目
◇ データ型関数 ◇
型宣言しても予期しない事がおこる。
declareとstrict_typeを使って防止する。
declareはファイル単位でしか適用できない。 → 全てのファイルに宣言する必要がある。
function dosomething(int $num, string $message): ?bool
{
print 'true<br>';
return true;
}
$ret = dosomething(true, 'ARG2'); // 第1引数が整数型の1に変換するためエラーにならない
$ret = dosomething('3', 'ARG2'); // 第1引数が整数型に変換されるためエラーにならない
true → 1に自動変換されてしまう。
‘3’ → 文字列として認識しない。
↓↓↓防止策として↓↓↓
declare(strict_types=1) deleclare命令;
types=1は、型宣言の厳密モードを有効にするための部分です。strict_types の値が 1 の場合、このモードは有効になります。
deleclare命令はPHP処理の冒頭に書く必要がある。途中で書くとエラーになる。
デフォルト引数・・・> 値、定数(配列)は指定できるが変数はできない。
<?php
$default = 0.06;
function something($a = $default)
{
print $a;
}
something();
変数なので。。。エラーになる。
◇ 可変長引数 ◇
可変長引数 → 同じ種類の引数を何個でも受け渡ししたいときに使う。関数名では配列データになる。
※ 可変長引数は最後の引数にしか使えない。
※ 引数側(定義側)で…すると → スカラー型を配列にする操作と考える。
※ コール側で可変長引数…をすると → 配列をスカラー型に操作すると考える。
どっちもすると。。。
※ 呼び出したときに1度スカラー型になる → しかし定義側で配列にいれられる。
<?php declare(strict_types=1); ?>
<?php
// スカラー型だったのが配列になる。
function add(int ...$numbers): int
{
$total = 0;
foreach($numbers as $number)
{
$total += $number;
}
return $total;
}
$numbers = [3,2,4];
// 配列からスカラー型になる
$result = add(...$numbers);
print $result;
// 結果:9
ーーーーーーーコメントーーーーーーーー
可変長引数にてこずった。。。。
朝は連想配列、多次元1次元配列のforeachにもてこずってた。。
この記事が気に入ったらサポートをしてみませんか?