0
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.

生PHPについて知識を資産化していく④

Last updated at Posted at 2021-04-05

#前提として

  • 自分が勉強してきた知識を保存するために書いています。
  • 本当に初歩的な事から書いていってます。
  • 万が一間違っている可能性もございますので、その時はご指摘頂ければ嬉しいです。
  • 常時更新していく予定です。
  • アウトプット用ですので、MAMPを使用していきます。

####PHPについての記事はこちらから

##COOKIEとSESSION

①COOKIE(クッキー)
ブラウザごとに情報が保存される

・パスワード保存はNG
・近年GDPRなどで利用が制限されつつある

②SESSION(セッション)
サーバー側で情報を管理している

GDPR|個人情報保護委員会

###Google ChromeのCOOKIEの場所

①Google Chromeを開き、右上のタブから「設定」をクリック

chrome設定

②「プライバシーとセキュリティ」 → 「COOKIEと他のサイトデータ」を開く

cookieとデータ

③「すベてのCookieとサイトデータを表示」をクリックする

すべてのcookieとサイトデータ

④残っているCOOKIE情報が出てくる

残っているcookie

⑤試しに「localhost」と検索すると、テストしていた内容が表示される

localhost内のcookie

##COOKIEとSESSIONの動きが分かる簡単なコードを作成してみる

sessiontest_1.php
<?php

session_start(); //sessionを含める時には冒頭に必ず書く

?>

<!DOCTYPE html>
<html>

  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>

  <body>
  
    <?php

      if (!isset($_SESSION['visited'])) { //設定されていなかったら
        echo '最初の訪問です';

        $_SESSION['visited'] = 1; //訪問時に visitedを1 を受け取る
        $_SESSION['date'] = date('c'); //受け取る日付
      } else { //設定されていたら

        $visited = $_SESSION['visited'];
        $visited++; //visitedの値を 1つ 増やす
        $_SESSION['visited'] = $visited; //増やした値を visited に入れる

        echo $_SESSION['visited'] . '回目の訪問です<br>';

        if (isset($_SESSION['date'])) {//その時に date があったら日付を出す
          echo '前回訪問は' . $_SESSION['date'] . 'です';
          $_SESSION['date'] = date('c'); //現在の日付を 'date'に入れる
        }
      }

    ?>
  
  </body>

</html>

①最初の訪問時

最初の訪問

②2回目の訪問

2回目の訪問

③3回目の訪問

3回目の訪問

####var_dumpで見てみる

4回目の訪問です
前回訪問は2021-04-04T07:28:10+00:00です
array(2) {
  ["visited"]=>
  int(4)
  ["date"]=>
  string(25) "2021-04-04T07:33:05+00:00"
}
array(1) {
  ["PHPSESSID"]=>
  string(26) "ここにCOOKIEの値が入っています"
}

ブラウザでデータを確認する

データの確認

##SESSIONを破棄するファイルを作成

sessiontest_2.php
<?php

session_start();

?>


<!DOCTYPE html>
<html>

  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>

  <body>

    <?php

      echo 'セッションを破棄しました';

      // 空の配列を入れることで、セッション情報を空で上書きする
      $_SESSION = [];

      // クッキーにもセッションIDが残っているので削除する
      if (isset($_COOKIE['PHPSESSID'])) {
        // PHPSESSIDに空の情報を入れつつ、過去の日付を入れて削除する
        setcookie('PHPSESSID', '', time() - 1800, '/');
      }

      // セッションを破棄する
      session_destroy();

      echo 'セッション';
      echo '<pre>';
      var_dump($_SESSION);
      echo '</pre>';

      echo 'クッキー';
      echo '<pre>';
      var_dump($_COOKIE);
      echo '</pre>';

    ?>

// ブラウザを読み込むと、作成したセッション情報が破棄される

  
  </body>

</html>

php.net:セッション処理
php.net:setcookie()
ログイン機能の簡単実装サンプル(PHP/MySQL)

##いろいろな関数

###引数にデフォルト値を設定可能

function/defaultValue.php
<?php

ini_set("display_errors", 1);
error_reporting(E_ALL);

// = をつけると初期値になる
function defaultValue($string = null) //引数を設定しないとエラーになる
{
  echo $string . 'です';
}

// 引数なし
defaultValue(); //です と表示
echo '<br>';

// 引数あり
defaultValue('テスト'); //テストです と表示

?>

###タイプヒンティング(型を明示できる)

function/type_hinting.php
<?php

  // declare(strict_types=1); // 強い型指定 より固く宣言しないと動かない

  ini_set("display_errors", 1);
  error_reporting(E_ALL);

  echo 'タイプヒンティングテスト' . '<br>';
  /**
   * @param $string
   */
  // 型の指定なし
  function noTypeHint($string)
  {
    var_dump($string);
  }


  noTypeHint(['テスト']); // 引数string予定に 配列→ エラーではない

 ↓↓
 //エラーではない
 //タイプヒンティングテスト
 //array(1) { [0]=> string(9) "テスト" }

  echo '<br>';

  // タイプヒンティング (引数に型を指定。 型が違うとエラー)
  // typeTest(string(型), $string(引数))
  function typeTest(string $string) // 引数stringの他に、array,callable, bool, float, int, object, クラス名, インターフェース名
  {
    var_dump($string);
  }

  typeTest(['配列文字']);  // 引数にstringと指定しているのに配列→ こちらはエラー

 ↓↓
  // エラーになる
 // Fatal error: Uncaught TypeError: Argument 1 passed to typeTest() must be of the type string,〜

?>

php.net:型宣言
php.net:declare

※PHPは動的型付であり、関数(型, 引数)だと弱い可能性があるので、「declare」などは大人数で作成するときに使われる可能性がある。

###可変変数

function/valiableLengthArgs.php
<?php
// 可変引数(関数の引数に ドット「.」を3つ付けてから変数を書く)
// 複数の変数をまとめて指定することができる
function combine(string ...$name): string // 戻り値の型宣言
{
  $combinedName = '';
  for($i = 0; $i < count($name); $i++) {
    $combinedName .= $name[$i];
    if($i != count($name) - 1) {
      $combinedName .= '・';
    }
  }
  return $combinedName;
}

$lName = '名前';
$fName = '苗字';
$name1 = combine($fName, $lName);

echo '結合結果: ' . $name1 ;
echo '<br>';

$variableLength = combine('テスト1', 'テスト2', 'テスト3');
echo $variableLength;

↓↓

// 結合結果: 苗字・名前
// テスト1・テスト2・テスト3  と表示され、複数の変数を処理してくれている

?>

php.net:新機能・戻り値の方宣言

###array_map

引数に関数(コールバック関数)を入れることができる

function/arrayMap.php
<?php

$parameters = [' 空白あり ', ' 配列 ', ' 空白あり '];

echo '<pre>';
var_dump($parameters);
echo '</pre>';

// array_map(引数に関数) 配列の値それぞれに関数を適用する
$trimedParameters = array_map('trim', $parameters); //trim:空白を削除する関数

echo '<pre>';
var_dump($trimedParameters);
echo '</pre>';

↓↓

array(3) {
  [0]=>
  string(14) " 空白あり "
  [1]=>
  string(8) " 配列 "
  [2]=>
  string(14) " 空白あり "
}
array(3) {
  [0]=>
  string(12) "空白なし"
  [1]=>
  string(6) "配列"
  [2]=>
  string(12) "空白なし"
}

?>

###コールバック関数

引数に関数を入れる

<?php

function combineSpace(string $firstName, string $lastName): string
{
  return $lastName . ' ' . $firstName;
}

$nameParam = ['名前', '苗字'];

// コールバック関数(引数に関数を入れる)
function useCombine(array $name, callable $func)
{
  $concatName = $func(...$name);
  print($func.'関数での結合結果: ' . $concatName . '<br>');
}

useCombine($nameParam, 'combineSpace');

?>

php.net:コールバック

####PHPについての記事はこちらから

0
0
0

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
0
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?