見出し画像

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にもてこずってた。。

この記事が気に入ったらサポートをしてみませんか?