2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初学者奮闘録】Cookieを利用したカウンターの作り方(PHP)

Last updated at Posted at 2021-10-09

###はじめに
この記事は、独学開始から約3ヶ月の実務未経験者が作成したものです。
よって、スキルは非常に未熟なため、決して本記事の内容を鵜呑みにされないよう、ご注意ください。
(未熟な私が記事投稿を行なっている背景については、本文の最後にお伝えします。)
また本記事は、PHP言語の基礎理解を目的としております。
よって、Webアプリ開発におけるルーティングなどについては考慮できておりませんので、ご容赦ください。

###本日の学習課題
今回はCookieを利用したカウンターの作成方法について、アウトプットします。
以下が、完成コードです。

function get_count(){

        if (isset($_COOKIE["count"])){
            $count = $_COOKIE["count"] + 1;
        }else{
            $count = 1;
        }

setcookie("count", $count, time() + 30);
}

上記のコードを実装してある私の自作WebサイトのURIを下記に貼り付けておきます。
興味のある方は、是非ご確認ください。
https://damp-earth-24115.herokuapp.com/count

※本記事を作成するため、PHP公式マニュアルを参考いたしました。
https://www.php.net/

###解説

これから、上記のコードがどのような流れでプログラムを実行していくかに重点を置いて解説します。

まずは、if文にセットされているisset関数です。
isset関数は、isset関数の引数にセットされている変数に値が入っているか否かをtrue・falseで判定する関数です。
今回のisset関数の引数には、$_COOKIEという変数が入っているため、この変数に値が入っているかを判定しているということです。
($_COOKIEという変数はとても重要な変数ではありますが、後ほど解説いたします。)
isset関数の引数に値が入っていれば、trueと判断され、以下のコードへ移動します。

$count = $_COOKIE["count"] + 1;

もし値が入っていなければ、falseと判断され、elseへと条件分岐します。

一旦、$_COOKIEには値が存在しなかったと仮定して、話を進めます。
つまり、elseへと条件分岐し、$countには『1』が代入されます。
その後、以下のコードへ移動します。

setcookie("count", $count, time() + 30);

ここでCookieについて説明します。
Cookieとは、Webサーバーとブラウザの狭間で情報を一時的に保管する仕組みのことです。
setcookie関数は、そのCookieへと情報を送信するものです。
setcookie関数の第二引数で$count(=1)という情報がCookie内に一時保管され、第一引数で第二引数の情報に"count"という名前を命名します。
この第一・第二引数によって、Cookie内に「"count"という名前の情報($count(=1))が一時保管された」ということになります。
続いてsetcookie関数の第三引数に、Cookie内に一時保管された"count"という名前の情報を何秒間保管し続けるのかについて、定義しております。
今回の場合、【time() + 30】と第三引数に記載されているため、30秒間の保管としております。
つまり、setcookie関数の第一・第二引数でセットした情報は、セットが完了してから30秒を超えると、消去されるということです。

setcookie関数によってCookie内に送られた情報の取り出すには、$_COOKIEを使う必要があります。

$_COOKIEは上記でもお伝えしましたが、ただの変数ではありません。
スーパーグローバル変数といい、PHP公式ホームページには、『スーパーグローバル変数とは、すべてのスコープで使用できる組み込みの変数』と記載されております。
スコープについて分かりやすい解説されている記事を下記に添付いたしました。
https://techacademy.jp/magazine/19302

$_COOKIEの後に記載されている["count"]は、先ほどsetcookie関数の第一引数で定義した名前countを識別し、その値を自身に代入することができます。

$_COOKIEに値が代入されている状態で、再度if文の内容を確認していきましょう。

        if (isset($_COOKIE["count"])){
            $count = $_COOKIE["count"] + 1;
        }else{
            $count = 1;
        }

$_COOKIEに『1』がありますので、isset関数はtrueと判定し、【$count = $_COOKIE["count"] + 1;】へ移動します。
$countには、$_COOKIE["count"]の1と、その後に記載さている『+1』で、『2』の値が代入されます。

$countに『2』が代入された状態で、【setcookie("count", $count, time() + 30);】に移動し、先ほど説明した挙動になります。

setcookie関数の第三引数がタイムアップする前に情報を更新し続けられたなら、$countは無限に数字を伸ばすということとなります。

以上、解説は終わります。

###最後に
上記でもお伝えいたしましたが、私は独学開始から約3ヶ月の実務未経験者です。
そんな未熟な私が記事を投稿しようと決意した理由は、以下の通りです。
・初学者の記事が多く出回るほどに、プログラミングの学習を検討している方の背中を押せると考えたから(私自身、学習を開始するまでに初学者の記事を読み漁っておりました)
・周りに同じ境遇の仲間がいない、孤独な初学者さんの競争心を掻き立てられるのではと考えたから(学習効率を上げるためにはライバルの存在は重要)
・あるいはこのような稚拙な記事を読んだ初学者さんが「自分のレベルはこいつよりも上」と優越感を与えられるのではと考えたから(学習効率を上げるためには自信を持つことも重要)

プロのエンジニア同様、初学者にもそれなりの努めがあると、私は思います。
今後も、下手くそながらも【初学者ページ】を上げ続けて参ります。

最後まで読んでいただき、誠にありがとうございました。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?