【PHP講座08】用意された関数を使ってみよう

PHP講座

前回は、条件によって繰り返し処理を行う3つの文を解説した。

  • while文
  • for文
  • foreach文

それぞれの使い方特徴も併せて、しっかり身に付けておこう。

前回の記事は以下だ。

【PHP講座07】3パターンで行う繰り返し処理を解説! | Shino’s Mind Archive

今回は、関数編に入っていく。

が、一度に全て解説しようとするとかなりの長さになるので、まずは用意された関数を使えるところまでを解説する。

かなりできることの幅が広がるので、しっかり追い付いてきて欲しい。

スポンサーリンク

関数

先に、そもそも関数とは何ぞやというところを解説する。

関数とは、事前に定義された処理を呼び出すことができる仕組みのこと。

プログラムを組む上で、よく使われる処理というのがある。

例えば、数字をある桁で丸めたり、文字列の中である部分を別のものに置換したり、などだ。

こういったものをわざわざ組む必要がないように、関数という仕組みで簡単に使うことができる。

この関数を使うときの書き方は以下の通り。

関数名(引数1, 引数2, ...);

変数と同じように、関数にもそれぞれ名前がつけられている。

これを書き、後ろに小括弧で引数というものを列挙してあげる。

こうすることで、その関数名で定義された処理を呼び出すことができるのだ。

この引数というのは、関数で処理をする際に使うデータのこと。

例えば、上でちらっと挙げた数値を丸める処理については、以下二つの情報が欲しいだろう。

  • 丸める数値
  • どこの桁で丸めるか

これらを、引数として渡してあげる必要があるのだ。

もちろん、この引数には直接データを書くこともできるし、変数を入れることもできる。

数も関数によって決まっており、中には一つも要らないタイプもある。

その場合は、関数名();で呼び出せる。

なお、この処理した結果で見ると、関数は二つのタイプに分けられる。

  • 処理だけを行うタイプ
  • 処理した結果を返すタイプ

どういうことかというと、例えば上で出した数値を丸める関数。

これは、丸めた結果を返すタイプだ。

このように、関数の実行によって戻ってくる結果のことを戻り値と呼ぶ。

この戻り値は、関数を実行すると、その関数を書いた部分に置き換わるような動きをする。

そのため、戻り値を使いたいときに、その関数をそこに書けば結果が使えるようになる。

よくあるのは、一旦変数に格納する形

この場合は、以下のように書くことになる。

変数名 = 関数名(引数1, 引数2, ...)

こうすれば、関数実行の結果となる戻り値を、変数に代入できる。

その他、真偽値を返す関数で条件分岐を行う場合なんかもあるので、まずはそんなもんなんだ程度に思っておいて欲しい。

ただ、通常は戻り値は一つしか受け取れないことに注意しておこう。

具体的な関数3つを紹介!

さて、色々書いてきたが実際使ってみないと実感が湧かないと思う。

というわけで、ここからは幾つか具体的なものを紹介していこう。

なお、当然だがここで紹介するものが全てではない。

必要に応じて、自分で調べていこう。

数値を丸めるfloor()

まずは、上の例で出していた数値を丸める関数。

これは単純で、引数が一つだけ必要になる。

  • 【必須】丸める数値

これで、入力された数値を超えない最大の整数を戻り値として返してくれる

例えば、3.14という数値を渡すと、これを超えない最大の整数、つまり3が返ってくる。

他にも、-2.5を渡すと、今度は-3が返ってくる、という感じだ。

以下、簡単に実行して表示するサンプルを提示するので、数値を変えて色々と試してみよう。

<?php
    $num = 3.14;
    $res = floor($num);
    echo "結果:" . $res;
?>

なお、公式のドキュメントは以下ページだ。

PHP: floor - Manual

このfloor関数に限らず、事前に用意されている関数には必ずドキュメントが用意されている

使い方や引数、戻り値も全て載っているので、困ったら見るようにしよう。

文字列を置換するstr_replace()

上で出したもう一つの例もご紹介しておこう。

これは、以下4種類を引数に渡すことができる。

  • 【必須】置換前の部分文字列
  • 【必須】置換後の部分文字列
  • 【必須】置換する対象の文字列
  • 【任意】置換した数を受け取る変数

四つ目は後で解説するのでいったん無視して欲しい…

この関数では、三つ目に渡した文字列の中から、一つ目に渡した部分文字列を探す。

見つかったら、その部分文字列を二つ目に渡した文字列に置換してくれるのだ。

これを、左から順番に探し、該当したものを全て置換してくれる。

具体例を見てみよう。

日付を表す文字列2020-7-23について、区切り文字をハイフンからスラッシュに変えたいとしよう。

このとき、以下のように実行することで置換することができる。

<?php
    $dateStr = "2020-7-23";
    echo "置換前:" . $dateStr;

    echo "<br>"; // 表示調整用

    $dateStr = str_replace("-", "/", $dateStr);
    echo "置換後:" . $dateStr;
?>

さて、関数の説明で、戻り値は通常一つしか受け取れないと書いた。

しかし、値を受け取りたい変数を引数として渡すことで、追加で値を受け取れるような場合がある。

今回の引数4つ目がその例だ。

この場合、ここに書いた変数に、置換した回数が入るようになる。

これも表示してみると、以下のような感じ。

<?php
    $dateStr = "2020-7-23";
    echo "置換前:" . $dateStr;

    echo "<br>"; // 表示調整用

    $dateStr = str_replace("-", "/", $dateStr, $count);
    echo "置換後:" . $dateStr;
    echo "<br>"; // 表示調整用
    echo "置換数:" . $count;
?>

このstr_replaceの公式ドキュメントは以下。

困ったら参照してみよう。

PHP: str_replace - Manual

HTMLタグを通常の文字列化するhtmlspecialchars()

これは是非覚えておいて欲しい関数だ。

今回の中でもちょっと使っているように、echoで文字列を表示するときに、HTMLタグを出力している。

しかし、例えばユーザーから値を受け取って、それを表示する場合には、そのまま表示してしまうと問題が発生する

何かというと、JavaScriptが実行し放題になってしまうのだ。

ちょっと、試してみよう。

以下、二つのファイルを作成してほしい。

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>データ送信</title>
    </head>
    <body>
        <form action="http://localhost/php/sample19/result.php" method="post">
            <input type="text" name="input_text">
            <input type="submit" value="送信">
        </form>
    </body>
</html>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>データ受信</title>
    </head>
    <body>
        <p>受信データ</p>
        <?php echo $_POST["input_text"]; ?>
    </body>
</html>

先にindex.htmlへアクセスし、文字列を受け付ける。

その内容を、result.phpで表示しているだけだ。

さて、このindex.htmlで以下の内容を入力してみよう。

<script>alert("アラート!!");</script>

これでresult.phpにアクセスすると、アラートが表示されただろうか。

このようにJavaScriptを入力することで、実行させることができてしまう

これはクロスサイトスクリプティングといって、攻撃の一種だ。

なので、他のサイト等では絶対に行わないようにしてほしい。

詳細は調べてみよう。

これを防ぐために、HTMLタグをタグとしてではなく、ただの文字列として表示したい

それに使えるものの一つが、このhtmlspecialcharsという関数。

公式ドキュメントを先に貼っておこう。

PHP: htmlspecialchars - Manual

やることとしては、特定の文字をタグとして認識されないように変換しているイメージだ。

具体的には、&<>などを特殊な文字の並びに変換している。

タグを囲む<>を変換しているので、タグとして認識されなくなっているというわけだ。

以下のサンプルの実行例を見てもらえれば、どういうことか分かると思う。

<?php
    $str = "<h1>タイトル</h1>";
    echo $str;

    echo htmlspecialchars($str, ENT_QUOTES, "UTF-8");
?>

これを実行すると、一つ目の出力ではh1タグがしっかりタグと認識されている

しかし、二つ目の出力ではそのまま<h1>タイトル</h1>と出力され、タグが入っていてもただの文字列になっていることが分かる。

なお、引数の二つ目に指定しているENT_QUOTESシングルクォート、ダブルクォートもこの処理の対象に入れるもの、三つ目に指定しているのは文字コードだ。

特別な事情がない限り、この指定方法で問題はないかと思う。

ここまで理解できたら、上で紹介したサンプルのresult.phpを修正して、アラートが出たものも文字列として表示されるようにしてみよう。

おわりに

まだまだ紹介したい関数は大量にあるが、あまり長くなってもいけないのでこのくらいにしておこう。

というわけで、今回は関数の説明と、幾つか具体的なものを紹介した。

こういったものを見ていると、これを自分で定義したい、という発想になるかと思う。

なので、次回はこの関数を自分で作る方法をご紹介する。

今回出した引数戻り値といった用語もガンガン出てくるので、今のうちに確認をしておこう。

コメント

タイトルとURLをコピーしました