PHP8模試 間違えたとこまとめ その1

ヒアドキュメント

改行を含む長い文字列を表す場合に使う。

<?php
<<<EOD
...
EOD;

※EODという文字は区切り文字(識別子)のため、開始と終了があっていれば、EOD以外の文字(「TEXT」や「HTML」など)に変えてもいい。その場合、小文字でもいいが、見分けるため大文字が一般的。

開始文字列の囲み方によって文字列の解釈が異なるため注意が必要。

  • <<<EOD<<<"EOD":変数やエスケープシーケンスを扱える。(展開できる
  • <<<'EOD':変数やエスケープシーケンスを扱えない。(展開できない

終了文字列(最後のEOD)にクォートはつけない・前後に空白を入れない。また、変数を入れる場合は {$変数名}と書く。


substr("文字", 開始位置, 長さ)

文字列の一部を切り取って返す。

  • offset(開始位置):文字の0から数えてn番目。正の値:0→右、負の値:文字の最後尾から数える(-1から数える。)
    ※文字列長さ < offsetだと空文字("")を返す。
  • length(長さ):正であればoffsetから数えてn文字分を返す。負であれば、終端からn文字手前まで返す(末尾の文字を省略する。)。
    ※0だと空文字("")を返す。省略するとoffsetの数値~終わりまで

コメント

<!-- ~ -->:HTMLのソースコードに出力される
// , #:単一記述(行末まで)。実務では#はあまり使わない(私自身使ったことない)
/* ~ */:複数行記述

if文の条件式(trueになるもの)

式を計算した結果が「true(真)」と評価されれば、if文の中身が実行になる。

  • "php" > "per1"→文字同士の比較。アルファベット順(辞書順)で後ろにある方が【大きい】と判定される。
  • "534a" > 56→数字から始まる文字数値を比較する場合、文字を数値に変換して辞書順で比較する。
  • abs(-6) > 10 / 2→ただの通常計算式の比較。※abs()は絶対値を返す関数。

false(偽)になるもの

booleanのfalse/数値の0or0.0/空文字""/文字列の"0"/要素が空の配列/null


配列の添え字とループの順序

配列のキー(添え字)の数字がバラバラに書かれていても、for文では添え字順(0,1,2...)で指定する。
反対にforeach文は配列に代入された順序でループする。
たとえ、要素の値が英語で「one, two...」とあっても、追加された順序には関係ない。


sort(対象配列[比較方法])

配列内容を並び替える。戻り値はbool(正/偽)。元の配列そのものが書き換わる。ちなみに、昇順は0→1、降順は1→0。また、降順の関数には先頭に「r」がつく。

通常配列

  • sort():昇順。基準:値。キーの扱い:リセット(0、1、2...)

sortはキーがリセットされるため、$〇〇[0] => 'A' みたいな元の添え字がリセットされる。

連想配列

  • asort():昇順。基準:値。キーの扱い:維持される。
  • ksort():昇順。基準:キー。キーの扱い:維持される。

多次元配列

$array[0][1]の様に、配列の中に配列が入っている構造のこと。配列番号は0から始まる。


関数宣言の注意事項

引数のデフォルト値に変数は使えない。

間違い(エラーになる)

<?php
$name_defo = "ゲスト";
function welcome($name = $name_defo){}
?>

正解

<?php
function welcome($name = "ゲスト"){}
//文字列や定数、配列などの固定値ならOK
?>

関数の定義位置の注意点

普通の関数は呼び出し後に定義してもいい。PHPは事前にファイル全体を読み込んでいるから。
ただし、if文など特定の条件で定義される関数は呼び出し前に定義。条件が通って関数が読み込まれるため存在しない扱いになる。