#前提として
- 自分が勉強してきた知識を保存するために書いています。
- 本当に初歩的な事から書いていってます。
- 万が一間違っている可能性もございますので、その時はご指摘頂ければ嬉しいです。
- 常時更新していく予定です。
- アウトプット用ですので、MAMPを使用していきます。
####PHPについての記事はこちらから
##COOKIEとSESSION
①COOKIE(クッキー)
ブラウザごとに情報が保存される
・パスワード保存はNG
・近年GDPRなどで利用が制限されつつある
②SESSION(セッション)
サーバー側で情報を管理している
###Google ChromeのCOOKIEの場所
①Google Chromeを開き、右上のタブから「設定」をクリック
②「プライバシーとセキュリティ」 → 「COOKIEと他のサイトデータ」を開く
③「すベてのCookieとサイトデータを表示」をクリックする
④残っているCOOKIE情報が出てくる
⑤試しに「localhost」と検索すると、テストしていた内容が表示される
##COOKIEとSESSIONの動きが分かる簡単なコードを作成してみる
<?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回目の訪問
③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を破棄するファイルを作成
<?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)
##いろいろな関数
###引数にデフォルト値を設定可能
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
// = をつけると初期値になる
function defaultValue($string = null) //引数を設定しないとエラーになる
{
echo $string . 'です';
}
// 引数なし
defaultValue(); //です と表示
echo '<br>';
// 引数あり
defaultValue('テスト'); //テストです と表示
?>
###タイプヒンティング(型を明示できる)
<?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は動的型付であり、関数(型, 引数)だと弱い可能性があるので、「declare」などは大人数で作成するときに使われる可能性がある。
- [コンパイラとインタプリタとは?現役エンジニアが分かりやすく解説]
(https://blog.codecamp.jp/compiler-interpreter-commentary) - 動的型付けと静的型付け
###可変変数
<?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
引数に関数(コールバック関数)を入れることができる
<?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についての記事はこちらから