PHP
- 1. PHP等
- 2. VSCode拡張(PHP用)
- 3. 開始タグと終了タグ
- 4. ;
- 5. 大文字小文字
- 6. コメント
- 7. echo
- 8. カンマとピリオド
- 9. 定数
- 10. 定義済みの定数
- 11. __LINE__
- 12. 変数
- 13. 変数の計算順
- 14. スコープ(変数の有効範囲)
- 15. グローバル変数
- 16. スーパーグローバル変数
- 17. スタティック変数
- 18. “"の中で$●を表示したい時
- 19. print()
- 20. preタグ
- 21. print_r()
- 22. var_dump
- 23. エラー文
- 24. 代入演算子(=)
- 25. 複合代入演算子(+=、-=、*=、/=、%=、.=)
- 26. 算術演算子(+-*/%**)
- 27. 文字列結合演算子
- 28. 変数を{}で囲む
- 29. 余りは、整数で計算される
- 30. オペレータとオペランド
- 31. 数字入り文字列の計算
- 32. インクリメント(++)
- 33. デクリメント(–)
- 34. ポストインクリメント(ポストデクリメント)
- 35. 文字のインクリメント(デクリメント)
- 36. インクリメント系を日本語で言うと・・・
- 37. 比較演算子(>,<,<=,>=,==,===,!==等)
- 38. 論理演算子
- 39. mt_rand();
- 40. 三項演算子
- 41. PHPの公式マニュアル
- 42. ビット演算子(<<、>>)
- 43. キャスト演算子
- 44. 演算子の優先順位
- 45. if文
- 46. ネスティング
- 47. if文(複数)
- 48. switch文
- 49. while文
- 50. count(配列)
- 51. in_array(a,配列)
- 52. array_push(配列,a);
- 53. do-while文
- 54. for文
- 55. break;
- 56. continue;
- 57. よく使う数学関数
- 58. ユーザー定義関数
- 59. PHP_EOL
- 60. functionを書く場所
- 61. 変数の値渡しと参照渡し(&変数)
- 62. 可変変数
- 63. 無名関数
- 64. 文字列に変数を入れる時
- 65. エスケープシーケンス
- 66. ヒアドキュメント構文
- 67. Nowdoc構文
- 68. PREタグとは(HTML)
- 69. フォーマット文字列を表示
- 70. フォーマット文字列の構文
- 71. フォーマットされた文字列を返す
- 72. number_format(引数);
- 73. mb_strlen(引数);
- 74. mb_substr(文字列,文字位置,文字数);
- 75. mb_convert_kana(文字列, option, encoding);
- 76. trim(文字列);
- 77. htmlspecialchars(文字列, 変換パターン, 文字コード);
- 78. 文字列と数値を比較する時
- 79. mb_strpos(文字列A, 文字列B)
- 80. 正規表現
- 81. 正規表現のパターン構文
- 82. preg_match(パターン,対象の文字列)
- 83. メタ文字
- 84. デリミタ(区切り文字)
- 85. 文字クラスを定義([])
- 86. 定義済みの文字クラス
- 87. 文字クラス定義外([]の外)で使うメタ文字
- 88. 選択肢
- 89. 繰返し
- 90. マッチした文字列を取り出す
- 91. マッチした全ての値を取り出す
- 92. implode(文字, 配列);
- 93. 検索置換
- 94. 配列
- 95. 連想配列
- 96. 文字列⇔配列
- 97. 配列の要素を削除する
- 98. 配列を演算子+で連結
- 99. array_marge()で連結
- 100. array_merge_recursive(配列A, 配列B);
- 101. 2次元配列の出力方法
- 102. 配列を切り出す
- 103. 配列から値を順に取出す繰返し
- 104. 配列からキーと値を順に取出し繰返す
- 105. 配列から条件に合う値を抽出
- 106. 配列を変数に展開
- 107. ソート
- 108. natsort();
- 109. in_array();
- 110. array_diff();
- 111. array_walk();
- 112. array_map();
- 113. クラス定義
- 114. インスタンス自身を指し示す($this)
- 115. VScodeの補足
- 116. コンストラクタ
- 117. クラス定義ファイルの読込
- 118. スタティックプロパティ(メソッド)
- 119. 送信フォーム(POSTメソッド)
- 120. getメソッド
- 121. 再起呼び出し
- 122. METHOD(マジック定数)
- 123. XSS(クロスサイトスクリプティング)
- 124. htmlspecialchars(値, ENT_QUOTES, 'UTF-8’);
- 125. if文の一般的な書式で書いた時
- 126. isset関数
- 127. ctype_digit関数
- 128. preg_match(パターン, 文字列);
- 129. isSet(値);
- 130. in_array(値,配列);
- 131. is_array(配列);
- 132. strip_tags(文字列);
- 133. mb_substr(文字列, 開始位置, 文字数);
- 134. mb_strlen(文字列);
- 135. nl2br(文字列,bool値);
- 136. DBMS
- 137. UNSIGNED(属性)
- 138. AUTO INCREMENT
- 139. サーバー
- 140. PDO(PHP Data Objects)
- 141. try~catch(例外処理)
- 142. bindValue(プレースホルダ, 値, 値の型)
- 143. header関数
- 144. empty関数
- 145. SQLインジェクション対策
- 146. トランザクション処理
- 147. セッション
PHP等
・PHPはサーバサイドスクリプト。
・ブラウザにはPHPの翻訳機能は無い。
・サーバ上でPHPを実行した結果をダウンロード。
・PHPを学ぶ為にブラウザとWEBサーバが必要(の為MAMP使用)。
・ApachがWEBサーバ(以前は主流)、今はnginXらしい。
・バックエンドの仕事はLinux等の広範囲な知識が必要。
・TeraPadは、ctrl+jで指定の行番号へ飛べる。
・起動時の設定で動き続けるので設定変更時はMAMPを再起動。
・ドキュメントルートは、サーバが管理している所(C:\MAMP\htdocs)。
・PHPでブラウザ表示されたもののコードは見えない。
VSCode拡張(PHP用)
①PHP Intelephense
・インストール
・拡張機能の設定から下記を確認
Environment: PHP Version を確認
Diagnostics: Argument Countのチェックを外す(上の方に項目有り)
Format: Enableのチェックを外す(下の方に項目有り)
②builtin php
・デフォルトで入っているので検索して、無効にする
③Open PHP/HTML/JS In Browser
・まずliveServerを止める
・localhost の port 番号が 80ならそのまま
④phpfmt ? PHP formatter
・インストール
・Detect_indentはチェック無
・Enable_auto_alignはチェック有
・Php_binはPHPのバージョン通りパス入力
・Psr1はチェック入れる
・Psr1_namingはチェック無
・Psr2はチェック無
④の拡張機能開く
・Indent_with_spaceのsetting.jsonをクリックし、Indent_with_space を2に変更
・Passesも同様にsetting.jsonで入って、"AlignPHPCode”を追加
Document Root Folder 検索して入力
C:\MAMP\htdocs\
Url To Open 検索して下記選択
http://localhost/
開始タグと終了タグ
<?php
echo "こんにちわ";
?>
・htmlにPHPを書く時はbodyタグの中に書く。
・文字列はダブルクォーテーションで囲む。
・シングルクォーテーションの場合、表示されるが動きがかわる。
・一行で書く場合、開始タグの後にスペースが必要。
;
・ステートメント(行、命令文)の最後はセミコロン。
・閉じタグ直前のセミコロンは省略可ではあるが、書く方がベター。
大文字小文字
・関数やクラス(は大文字小文字)の区別はされない。
・変数は区別される。
コメント
// 1行コメント
# 1行コメント
/*
複数行コメント
*/
echo
HTMLの中に文字列を出力し、複数の値を表示出来る。
// 変数Aを表示
<?php echo $A; ?>
// php echoの表記を=に省略可能
<?= $A; ?>
// htmlタグも文字列としてhtml内に出力して、ブラウザ上で改行されて表示。
<?php
echo "あいうえお", "<br>";
echo "かきくけこ";
?>
カンマとピリオド
「,」で区切ると複数を続けて扱える(タグも可)。
「.」は文字と文字を連結。
<?php
$a = "犬";
// どちらも「サルとキジと犬」が出力
// 1行目の最後のタグで改行
echo "サルとキジと", $a, "<br>";
echo "サルとキジと" . $a;
?>
<script>
let b = "犬";
// JavaScriptの文字連結は「+」
console.log("サルとキジと" + b);
</script>
定数
JavaScriptと同じで、constで定義。
<?php
const ●●
(省略)
?>
又は
define("●●", 代入する値)
定義済みの定数
・コアモジュール定数・・・コアで定義された定数。
・マジック定数・・・主にデバッグ時に使う定数。
// マジック(マジカル)定数
// 書いた場所によって値が変わる定数
// 例)__LINE__は書いた場所の行番号が格納
echo __LINE__, "<br>";
echo __LINE__, "<br>";
・タグ入力を機械がやってくれているので、改行したい時はbrタグを文字入力するとブラウザ上で改行される。
__LINE__
・マジック定数の一つ。
・ファイル上の現在の行番号。
変数
$文字列
// $who部分が変数
<?php
$who = "PHP 7";
echo "こんにちわ、", $who;
?>
・JavaScriptの「let ●●」的なもん。
・「,」は、続きますという意味。
・PHPタグはページ内で何回区切ってもOK。
・変数には文字列でも数値でも可(型のチェック無)。
・変数は全て大文字が慣例。
変数の計算順
// 先に右辺の足し算をしてから最後に代入
$合計 = $A + $B + $C;
スコープ(変数の有効範囲)
変数には有効範囲が有る。
JavaScriptは、{}(ブロック)の中で宣言した変数は{}外では使用出来ない(ブロックスコープ)が、PHPは{}外でも使える(グローバル変数)。
グローバルスコープ・・・関数外で定義した変数の有効範囲
ローカルスコープ・・・関数内で定義した変数の有効範囲(関数内で有効)
・PHPは関数の中と外は別世界。
・同名の変数でも内と外は別物(JavaScriptなら使用可)
グローバル変数
関数内で書くと、外の変数(グローバルスコープ側)が関数内で使用可。
global 変数;
・但し、中から外の変数を変更出来てしまうのでエラーのもとになる可能性有り。
スーパーグローバル変数
PHPの定義済み変数で、ローカルとグローバルの両方のスコープを持つ変数。
・$_で始まる変数。$_SERVER等。
スタティック変数
ローカルスコープ側の変数だが、値はグローバルスコープ側同様に保持される変数。
static 変数名 = 初期値;
・初期化(変数=0)は最初の1回だけ。
“"の中で$●を表示したい時
・""の中で「$a」表示したい時は「\$a:」。
print()
1個の値を表示。
// 変数Aを表示
<?php
print($A)
?>
// ピリオドで連結して出力
print $A . "あ". $B;
・複数の値を表示出来ない(.で連結して1つの単語化すれば可)。
・今時は使用しないらしい。
preタグ
ソースコードの改行やインデントをそのまま表示したい時に使うhtmlのタグ。
・PHPの配列を表示する時に使うと便利(縦並びで見易くなる)。
・preformatted text(プレフォーマティッド)の略で整形済テキストと言う意味らしい。
print_r()
配列やオブジェクトを表示。
・print_r()を使用時は、preタグもセット(で覚える)。
// <pre>タグをつけるとブラウザ上の表示が見やすくなる
<pre>
<? php
print_r(配列);
?>
</pre>
// 別の書き方(上記と同じ表示)
echo "<pre>";
print_r(配列);
echo "</pre>";
・論理値やNULLは出力不可。
・alseは表示なし、trueは1と表示される。
var_dump
・理論値やデータ型等も出力出来る(デバッグ向き)。
var_dump($a);
エラー文
Notice: Undefined variable: (変数A) in C:\MAMP\htdocs\(省略)●●.php on line 20
// 訳)(エラーラベル):定義されていない 変数Aが パスにある●●.phpの20行目
・Notictは大したエラーではないらしい。
Parse error: syntax error, unexpected '、' (T_STRING), expecting ';' or ',' in C:\MAMP\(省略).php on line 15
// 構文のエラー,予期しない「、」が有り 「;」or「,」が必要
・syntax=構文
・unexpected=予期しない
・expecting=期待(必要?)
・token(トークン)=プログラム言語の中の言葉という意味
代入演算子(=)
左辺に右辺を代入。
$A = 1000;
複合代入演算子(+=、-=、*=、/=、%=、.=)
$a = $a + bを短くしたやつ、他も同様。
$a += 100;
算術演算子(+-*/%**)
// aのb乗
a ** b
// aをbで割った余り
a % b
文字列結合演算子
.(ピリオド)
$a = 10;
$b = 20;
print $a . "あ". $b; // 「10あ20」と出力
・文字列でも数値でも連結。
変数を{}で囲む
変数を{}で囲むと、前後に空白を入れずに文字列化。
// 「あい、うえお」と文字列出力
$b = "い";
$c = "えお";
echo "あ{$b}、う{$c}";
余りは、整数で計算される
// phpタグの中に小数点以下付きの数字、%の式があったら・・・
12.345 % 7.89
→ 12 % 7
→ 余り5
オペレータとオペランド
演算子・・・オペレータ
演算対象の値・・・オペランド
12.345 % 7.89 の場合
% がオペレータで、12.345と7.89がオペランド。
数字入り文字列の計算
文字列の数字だけ抜き取って計算される(が、使わない方がいい)。
// 15と出力される
<?php
$a = "5円" + "10円";
echo $a;
?>
インクリメント(++)
変数に1を足す事を、インクリメント。
// $aに1を足す(変数自体が1増える為、出力が1)
$a = 0;
$b = ++$a;
echo $a;
// この場合は出力0
$a = 0;
$b = $a + 1;
echo $a;
デクリメント(–)
変数から1を引く事を、デクリメント。
// $aから1を引く
--$a
ポストインクリメント(ポストデクリメント)
インクリメントと逆側に++がつく。
// $bに$aを代入してから1を足す
$a = 0;
$b = $a++;
echo $a; // 1が出力
echo $b; // 0が出力
// --も同様
文字のインクリメント(デクリメント)
インクリメントは文字にも適用される。
例)
$a = "10";
++$a; // 11
$b = "c";
++$b; // d (アルファベットで1文字進む)
// --も同様
インクリメント系を日本語で言うと・・・
++ = 加算子
— = 減算子
インクリメント = 前置加算子
ポストインクリメント = 後置加算子
(減算子も同様)
比較演算子(>,<,<=,>=,==,===,!==等)
// 値が等しい時
==
// 値も型も等しい時
===
// 値が等しくない時
!=
// 値、又は型が等しくない時
!==
// aがbより小さい時は負の値、=なら0、aが大きい時は正の値。
a <=> b
// abcの順にみて最初にnullじゃない値。全てnullならnull。
a ?? b ?? c
・nullはコミュニティにより「ヌル」や「ナル」。
論理演算子
論理積=かつ
論理和=または
排他的論理和=どちらか片方
否定=ではない
// 両方がtrueの時true(論理積)
a && b
// a又はb、又は両方がtrueの時true(論理和)
a || b
// a又はbのどちらか片方だけtrueの時true(排他的論理和)
a xor b
// aがtrueならfalse、faleseならtrue(否定)
!a
・英単語のandもいけるが遅いので使用しない
mt_rand();
// 0~100の乱数を作る。
mt_rand(0,100);
三項演算子
// 条件式がtrueならa、falseならbを代入
変数 = (条件式)? a : b;
// 例
変数 = ($a>$b)? $a : $b
// 上記をif文で書くと…
if($a>$b) {
変数 = $a;
} else {
変数 = $b;
}
PHPの公式マニュアル
ここを見れば間違いないらしい
https://www.php.net/manual/ja/index.php
ビット演算子(<<、>>)
あまり使わない
// aを左へb桁シフトする
a << b
// aを右へb桁シフトする
a >> b
// 例
// 3は2進数で11。
// 11を左に1ずらすと110
3 << 1
キャスト演算子
PHPは変数に型宣言は必要無い(自動変換)が、指定したい時はキャスト演算子が使える。
// 例)$aをint型に指定
(int)$a
・但し、これもあまり使わないらしい
演算子の優先順位
・演算子には優先順位がある
・and xor orなどは低い
・算数的な感じ(掛け算が先とか…)
if文
// もし条件式がtrueなら処理A、falseなら処理B
if(条件式){
処理A
} else{
処理B
}
・else以下は無くてもいい(=false時は処理無)
ネスティング
ネスト=入れ子
<ul>
<li>
<a>
</li>
</ul>
・ifの中にifがあるとif文のネスティング
// 条件式をまとめる時
if ((条件式A) && (条件式B)){
処理a
};
if文(複数)
else ifで3択以上の条件式が出来る。
if(条件式A){
処理A
} else if(条件式B){
処理B
} else{
処理C
};
・最後はif不要(elseだけ)。
・{}で囲まずコロンで区切り書式もある。
if(条件式A):
処理A
else if(条件式B):
処理B
else:
処理C
endif;
// 例)
<?php
$age = 18;
?>
<?php if ($age<=15):?>
15歳以下の料金は800円 <br>
<?php elseif ($age<=19):?>
16歳~19歳は1200円 <br>
<?php else:?>
20歳以上の大人は1500円 <br>
<?php endif;?>
・PHPはendとifは続けて書く
switch文
値で分岐する。
switch(式){
case 値1:
処理A
break;
case 値2:
処理B
break;
default:
処理C
break;
}
・default以降を省略可。
・厳密判定に向かない。
(例)文字の"10″と数値の10の処理をわけたい時など
while文
繰返す回数が未定時向きの繰返し文。
while(条件式){
処理
}
count(配列)
配列の要素数を数える関数。
・引数に「=●●」って書いてたら省略可(PHPマニュアル)。
・PHPの配列はオブジェクトではない。
・PHPにpushメソッドはないので関数で代用。
// JavaScript時
// 配列はオブジェクト
// lengthはプロパティ
// .push()はメソッド
let num = [1,2,3];
while(num.length < 5){
num.push(4)
}
in_array(a,配列)
配列の中にaが入っているか確認する関数。
array_push(配列,a);
配列にaを追加する関数。
・mixedは何を渡してもOK(PHPマニュアル)。
do-while文
// 処理後に条件が合えば繰返すループ文。
do {
処理
} while(条件式);
for文
カウンタを使った繰り返し文。
for(カウンタの初期化; 条件式; カウンタの更新){
処理;
}
・カウンタの初期化は、繰返し前に一度だけ行う。
・カウンタの更新は、ブロック内を全て実行後に行う。
break;
繰返しを中断する。
continue;
繰返しをスキップする。
・breakよりは使わないらしい。
よく使う数学関数
abs(数値)
数値の絶対値。
ceil(数値)
端数を切り上げた数値。
floor(数値)
端数を切り捨てた数値。
round(数値)
端数を四捨五入した数値。
ユーザー定義関数
プログラマー自身が作る関数。
function 関数名(引数1,…){
処理
return 戻り値;
}
// 引数の初期値設定が有るユーザー定義関数
// 前から埋めるので一番最後だけ省略は可
// 前だけ省略とかは不可(引数がどこの値か不明の為)
function 関数名(引数1=初期値1,引数2=初期値2,…){
処理
return 戻り値;
}
// 引数の2個目以降の個数を固定しない場合
// 2個目以降は配列に保管(2個だけでも配列に入る)
function 関数名(引数1, ...引数){
処理
}
// 引数の型指定:返り値の型指定
// 返り値の型指定を省略も可
function 関数名(型 引数):返り値の型{
処理
return 返り値;
}
PHP_EOL
コード上の改行(コードを見やすくする為)。
・brタグはブラウザ上の改行。
// 文字列を表示.(ブラウザ上で改行).(ソースコードを改行)
echo "文字列" . "<br>" . PHP_EOL;
functionを書く場所
・DOCTYPE宣言の上に書く事もある。
・ファンクション自体は上でも下でもどこに書いても呼び出せる。
・プログラムを読む時に、まずファンクションが無いか探している。
変数の値渡しと参照渡し(&変数)
値渡し・・・変数の値を渡す。
参照渡し・・・変数の参照(住所)を渡す。
可変変数
// 変数に入っている文字で新しい変数が作れる
// ${$color}ともかける
// $blueという変数を作って右辺を代入しているだけ
<?php
$color = "blue";
$$color = 123;
echo $blue;
?>
無名関数
// 名前の無い関数
function(引数){
処理;
}
・名前かぶりを防ぐ為、出来る限り無名関数で作る流れ(JavaScript)。
文字列に変数を入れる時
// "文字列"の中に変数を入れる時は{}で囲む
"文字列{変数}文字列"
エスケープシーケンス
“"の文字列で使える物
\"・・・"だけ表示される。
\n・・・ラインフィード(LF)。ソースコード上の改行。
\r・・・キャリッジリターン(CR)。ブラウザ上の改行(preタグで囲む)。
・他にも色々有り。
・エンマークとバックスラッシュはイコール。
’’の文字列で使える物
\’・・・’が表示される。
\・・・\が表示される。
ヒアドキュメント構文
長い文字列を代入(出力)するのに便利な構文。
変数 = <<< "識別子"
ながい文字列
識別子;
・識別子はなんでもいい(ABCとか)。
・一般的なのはEOD(エンドオブドキュメント)、EOM(~メッセージ)、EOF(~ファイル)とか。
・改行コードやタブもそのままHTMLのソースコード側に表示される。
・終わり側の識別子の前にスペースやタブを入れるとエラー。
・変数が展開される。
Nowdoc構文
<<< '識別子'
文字列
識別子;
・変数が展開されない(変数をそのまま表示)
PREタグとは(HTML)
・PREとは「preformatted text(整形済みテキスト)」の略。
・preタグで囲んだ範囲の整形済みテキストを表示するためのタグ。
フォーマット文字列を表示
printf('フォーマット文字列',値1,…)
// 例)円周率を小数第2位まで表示
// printf(書式,円周率)
printf('%.2f', M_PI);
・フォーマット=書式。
・フロートのf(浮動小数点数)
・M_PIは、円周率。
フォーマット文字列の構文
'...%書式修飾子 型指定子...'
フォーマットされた文字列を返す
sprintf()
・フォーマット後の文字列を変数に代入出来る。
number_format(引数);
3桁区切りの文字列作成。
// 例)1,000円と表示される
$p = 500 * 2;
$k = number_format($p);
echo $k, "円";
・画面表示直前に使用する(計算はそれ迄に)
mb_strlen(引数);
文字数を調べる。
// 例)(文字数)5が表示
$m = "あいうえお";
$l = mb_strlen($m);
echo $l
・mb(マルチバイト)。
・strlen(ストリングレンジ)。
・日本語圏はmb_必要(全角文字)。
・英語はmb_不要。
mb_substr(文字列,文字位置,文字数);
文字列から途中の文字を取り出す。
// 例)表示は下記のコメント参照
// えお、かきくけ(4文字目から7文字)
// こ。(最後から2文字)
$m = "あいうえお、かきくけこ。"
echo mb_substr($m,3,7);
echo mb_substr($m,-2);
・1文字目は0。
・-1は最後の文字。
mb_convert_kana(文字列, option, encoding);
文字を変換する。
// 例)文字とスペースを半角にする
$m = "A B C D E F"
mb_convert_kana($m, "rs")
・option
r・・・全角英字を半角へ
n・・・全角数字を半角へ
a・・・全角英数記号を半角へ
s・・・全角スペースを半角へ
他にも色々有り(詳細はPHPマニュアル参照)。
・encodingは文字コードの変換?で省略可。
trim(文字列);
文字列前後の不要な空白を取り除く。
// 例)タブと空白を取り除く
$m = "\tあいうえお \n";
$r = trim($m);
・\t・・・タブ
・\n・・・改行
htmlspecialchars(文字列, 変換パターン, 文字コード);
HTMLの特殊文字をエンティティ(実体)に変換する。
// HTMLエンティティ= &で始まり;で終わる文字列(例)&
// ENT_QUOTES = 'と"を文字を変換
echo htmlspecialchars($m, ENT_QUOTES, 'UTF-8');
・これで攻撃を防いだり出来る。
文字列と数値を比較する時
==ではなく===で比較する。
==だと中途半端に変換されて誤審を招くから。
mb_strpos(文字列A, 文字列B)
文字列Aの中に文字列Bがあるか検索。
・なければfalse。
・あれば何文字目にあるか数字が出る。
・最初にあった場所の数字が出る。
正規表現
パターンを使って文字のマッチの有無を判定。通常の検索より複雑な文字検索が出来る。
正規表現のパターン構文
/パターン/後置きオプション
// 例)郵便番号を正規表現で表す
// 数字3桁ハイフン数字4桁で終わり
/^\d{3}-\d{4}$/
preg_match(パターン,対象の文字列)
対象の文字列にパターンのマッチを確認する関数。
マッチすれば1、しなければ2、エラーはfales。
メタ文字
正規表現パターンの中で意味のある記号。
.(ドット)・・・何でもいい
デリミタ(区切り文字)
区切る文字。
・英数字とバックスラッシュ以外の文字なら何でもOK。
・スラッシュを含む文字列の場合は#で区切ったりする。
文字クラスを定義([])
文字クラスを定義([])
[0-9]・・・数字どれか
[a-z]・・・小文字英字どれか
[a-zA-Z]・・・英字どれか
[0-9a-zA-Z]・・・英数字どれか
[689]・・・6か8か9どれか
[黒白]・・・黒か白どっちか
[^黒白]・・・黒か白ではない
定義済みの文字クラス
\d・・・数字。[0-9]と同じ。
\D・・・数値以外。[^0-9]と同じ。
他にも有り。
文字クラス定義外([]の外)で使うメタ文字
バックスラッシュ・・・エスケープ
^・・・先頭一致
$・・・終端一致
.・・・任意の1文字(改行は含まない)
|・・・選択肢の区切り
[]・・・文字クラスの定義
{n}・・・n回繰返し
{n,}・・・n回以上
{n,m}・・・n~m回の繰返し
*・・・0回以上の繰返し。{0,}の省略形
+・・・1回以上の繰返し。{1,}の省略形
?・・・0又は1回の繰返し。{0,1}の省略形
/ab*c/
abbbbbbbbcはマッチ
acもマッチ
選択肢
// A又はBにマッチする。
"/選択肢A|選択肢B/u";
・|・・・又は(or)。これもメタ文字。
繰返し
// 数字がn桁(n回繰返す)ならマッチ。
"/[0-9]{n}/u"
// 小文字が3~8文字ならマッチ。
"/[a-z]{3,8}/u";
// ハイフンが0個か1個
-{0,1}
// 携帯番号にマッチするか
$p = "/^(090|080|070)-{0,1}[0-9]{4}-{0,1}[0-9]{4}$/u";
var_dump(preg_match($p, "090-1234-5555"));
// 定義済みのクラスとメタ文字を使用すると下記の用に短縮出来る
"/^(090|080|070)(-?\d{4}){2}$/u";
・{3,8}の8の前にスペースを入れるとダメ(プログラマー的には入れたいが要注意)。
マッチした文字列を取り出す
// 変数Aのパターンにマッチする物を、変数Bの文字列から探し
// マッチした物が有れば$matches(第3引数)の配列に1個だけ入る
// preg_matchは最初にマッチした物だけを見る関数
preg_match(変数A, 変数B, &$matches);
・&$matchesは参照渡し(直接追加)
・実際にコード書く時は&不要。
・preg_match自体はfalseか0か1(マッチ)しか返さない。
マッチした全ての値を取り出す
// 文字列の中からパターンにマッチした物を全て
// &$matches配列に入る
preg_match_all(パターン, 文字列, &$matches);
・2次元配列で、0番目の0から順に入る(0-0、0-1、0-2…)。
・パターン内のサブパターンは1番目から入る(1-0…)
implode(文字, 配列);
// 例)配列に入っている値を文字を挟んで出す
// 1-2-3と表示される
配列 = [1, 2, 3];
echo implode("-",配列);
・よく使う
検索置換
// 検索対象内でパターンとマッチする文字列を置換える
置換え用文字列の変数 = ****$1
preg_replace(パターン, 置換え用文字列, 検索対象の文字列)
・パターン内にサブパターンが複数有れば、その分だけ$1、$2…と増えていく。
・$0はマッチしたパターン全体を表示(例)サブ1、2もひっくるめて全体。
・サブパターンは()で囲む。
配列
// 例)
<?php
$a = [];
$a[0] = "あ";
$a[5] = "い";
$a[] = "う";
print_r($a);
?>
・基本的にはJavaScriptと同じ感じ。
・飛び番OK(他の言語では基本無いらしい)。
・インデックス番号書かなくても代入可。
・[]の時は、空いてる所の最大の数+1の所から順に代入。
連想配列
キーと値を組み合わせた配列。
$配列名 = [
キー名 => 値,
キー名 => 値
];
// 例)
$配列名 = [
"name" => "きつね",
"age" => "9"
];
// キーの値を変更
$配列名['キー名'] = 値;
// 要素を追加
$配列名['追加したいキー名'] = 値;
・非常に良く使う。
・文字の括りはシングルでもダブルでもOK。
文字列⇔配列
// 文字列を配列にする
explode("区切り文字", 文字列)
// 配列を文字列にする
explode("連結文字", 配列)
// 例)
$p = " 一郎, 次郎, 三郎";
$delimiter = ",";
$nList = explode($delimiter, $p);
print_r($nList);
// 配列から文字列にもどす(さんをつけて)
$moji = implode("さん、", $nList);
$moji .= "さん";
print($moji);
配列の要素を削除する
// 配列の指定位置から指定個数の要素を削除
// 配列を直接書き換える
array_splice(&配列, 位置, 個数);
・コード書く際は、配列の前に&は不要。
配列を演算子+で連結
// 演算子+でたすと
// 「あいうde」が表示(空の所だけ入る)
$a = ["あ", "い", "う"];
$b = ["a", "b", "c", "d", "e"];
$r = $a + $b;
print_r($r);
array_marge()で連結
// インデックス配列
// 下記の場合、
// 「あいう12345」が表示(全部つながる)
$a = ["あ", "い", "う"];
$b = ["1", "2", "3"];
$c = ["4", "5"];
$r = array_merge($a, $b, $c);
print_r($r);
// 連想配列
// 下記の通り(bだけ8に上書き)
// [a] => あ
// [b] => 8
// [c] => う
// [d] => 3
$a = ["a" => あ, "b" => い, "c" => う];
$b = ["b" => 8, "d" => 3];
$r = array_merge($a, $b);
print_r($r);
array_merge_recursive(配列A, 配列B);
重複する項目は多重配列で全て残す形で連結。
2次元配列の出力方法
// 例)a-2を出力
echo 配列[a][2]:// a-2の出力方法
echo 配列[a][2]:
配列を切り出す
array_slice(配列,位置,個数);
配列から値を順に取出す繰返し
foreach (配列 as 変数) {
変数を使った繰返しの処理;
}
・理由が無い限り、専用構文を使った方が効率が良い。
配列からキーと値を順に取出し繰返す
foreach(配列 as キー => 値){
キーと値を使った繰返しの処理
}
配列から条件に合う値を抽出
// 配列から条件(第2引数の関数)合う値を抽出
array_filter(配列, コールバック関数名);
・コールバックは、関数から関数を取り出す。
配列を変数に展開
list(要素1, 要素2, 要素3…) = インデックス配列;
ソート
// 昇順にソートする(並べ替え)
sort(配列);
(余談)
new(Array)があったら気を付ける(参照渡し)。
値渡し・・・変数のコピーを渡す(渡し先で変数の値を変更しても、渡し元に影響無し)
参照渡し・・・変数がある住所情報を渡す(渡し先で変数を書き換えると、渡し元の変数も変更される)。
natsort();
自然順にソート。
// 1.3.2.10なら、1.2.3.10の順に並べるのが自然順。
natsort(配列);
in_array();
配列に値の有無をチェックする。
// 値が配列の中に有ればtrue、無ければfalse。
// インデックス配列、連想配列のどちらでも検索可。
in_array(値,配列);
array_diff();
配列を比較して一致しない値を配列にして返す。
// チェックする配列の値が、配列AとBに含まれていない値をチェック。
array_diff(チェックする配列,配列A,配列B);
array_walk();
各要素を引数にして関数を繰返し実行。
// 配列の値分、関数を繰返す
// 配列を直接書き換える(参照渡し)
array_walk(&配列, コールバック関数, ユーザーデータ);
// 第3引数が有る場合は、コールバック関数にも設定する
function 関数名(値, キー, ユーザーデータ){
処理分
}
array_map();
配列の個々の値でコールバック関数を実行
// 処理した配列がAに入る(Bはそのまま)
// コールバック関数名だけで()不要
配列A = array_map(コールバック, 配列B)
// コールバック関数
// キープしてた結果をまとめて配列で返す
function 関数名(値){
処理
return 値;
}
複数の配列を並列的に処理
// 複数の配列を並列的にコールバック関数で処理
配列A = array_map(コールバック, 配列B, 配列C,…))
// コールバック関数
function 関数名(配列Bの値,配列Cの値,…){
処理
return 値;
}
クラス定義
// プロパティとメッソドがあるクラスの定義
class クラス名{
// プロパティ
public const 定数名 = 値;
public $変数名;
// メソッド
public functionメソッド名() {
}
}
・クラス名の頭は大文字(慣例)。
・クラスは、専門家。
・クラスの中身に、プロパティとメソッドが有る。
・プロパティは、データを保管する物。
・メソッドは、クラスが出来る行動。
・オブジェクトの中にあるとメソッド、単体だと関数(ファンクション)。
・オブジェクトの中にあるとプロパティ、単体だと変数。
・エラー出さない為に今はpublicをつける(privateが主?)。
・クラスのコピーをとってインスタンスを作る。
・右辺のnew~を、インスタンス化という。
// 例 クラス名Aを定義し、インスタンスを作る。
<?php
class クラス名A {
// プロパティ
public $プロパティ名A;
public $プロパティ名B;
// メソッド
public function メソッド名() {
処理;
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>クラスを定義する</title>
</head>
<body>
<pre>
<?php
// クラス名Aのインスタンスを作る
$インスタンス名 = new クラス名A();
// プロパティの値を設定
$インスタンス名->プロパティA = "●●";
$インスタンス名->プロパティB = 数字;
// インスタンスを確認
print_r($インスタンス名);
// メソッドを実行
$インスタンス名->メソッド名();
?>
</pre>
</body>
</html>
・インスタンスを作る時はnewをつける。
・->はインスタンスの設定の時だけ使う。
・プロパティの初期値の値に計算式は設定不可。
インスタンス自身を指し示す($this)
$this->プロパティ名
VScodeの補足
alt+上下矢印 行ごと移動
ctrl+c 行ごとコピー
ctrl+v 行ごと切取り
home 行の先頭
end 行の終わり
コンストラクタ
インスタンス作成時(newする時)に自動敵に呼ばれる関数。
function __construct(引数1, 引数2,…){
インスタンス作成時に最初に実行したい処理
}
クラス定義ファイルの読込
// <!DOCTYPE html>の上に下記を記入
// 下記は同階層の場合
<?php
require_once "クラス定義ファイル名.php";
?>
・ファイルの読込は、インスタンス作成前に読込必要。
・外部ファイル側の閉じタグは無くてOK。
・クラス定義ファイルは、出来れば別ファイルにする。
スタティックプロパティ(メソッド)
newしなくても使える静的プロパティ(メソッド)。
class クラス名{
public static const 定数名 = 値;
public static $変数名;
public static function メソッド名(){
}
}
送信フォーム(POSTメソッド)
// 例)単価と個数を指定しボタンを押すと結果ページが開く
// 前後のhtmlタグ等を省略(body内)
<!--
methodをPOSTにするとデータ送信メソッドはPOSTに。
POST送信はサーバーへのリクエストに追加され送られるのでURLに追加されない
--><form method="post" action="calc.php">
<ul>
<!-- フォームの各要素に設定されたname属性の値で連想配列のキー名がつき、データが送られる -->
<li><label>単価:<input type="number" name="tanka"></label></li>
<li><label>個数:<input type="number" name="kosu"></label></li>
<li><input type="submit" value="計算する"></li>
</ul>
</form>
// calc.php側
<?php
// POST送信されてきたデータは
// スーパーグローバル変数の$_POSTに連想配列として格納
// 連想配列のキーはフォーム要素のname属性の値
echo "<pre>";
print_r($_POST);
echo "</pre><hr>";
// フォーム入力の値を得る(単価と個数)
// $_POSTのキー名はフォームの各要素name属性の値
$tanka = $_POST["tanka"];
$kosu = $_POST["kosu"];
// 計算する
$price = $tanka * $kosu;
// 表示する(3桁位取り)
$tanka = number_format($tanka);
$price = number_format($price);
echo "単価{$tanka}円 × {$kosu}個 は {$price}円です。"
?>
getメソッド
// 例)指定された番号の有無を調べる
// フォームを表示する側のphpより抜粋
<form method="GET" action="checkNo.php">
<ul>
<li><label>番号:<input type="number" name="no"></label></li>
<li><input type="submit" value="調べる"></li>
</ul>
</form>
// getメソッドを処理する側のphpより抜粋
<pre>
<?php
require_once "lib/util.php";
$myCode = "<h2>テスト1</h2>";
$myArray = ["a" => "<p>赤</p>", "b" => "<script>alert('hello')</script>"];
echo '$myCodeの値:', es($myCode);
echo "\n\n";
echo '$myArrayの値:';
print_r(es($myArray));
?>
</pre>
再起呼び出し
関数Aを実行中に関数Aを呼び出す手法。
METHOD(マジック定数)
現在実行中のメソッド自身を指す特殊な定数。
XSS(クロスサイトスクリプティング)
GETリクエストのURLを改ざんしてブラウザで攻撃する手法。
htmlspecialchars(値, ENT_QUOTES, 'UTF-8’);
XSS対策の関数。
・ユーザから受けた値をブラウザ表示前に不正な文字をHTMLエスケープする。
if文の一般的な書式で書いた時
<?php if(条件式){ ?>
true時のコード
<?php } else { ?>
false時のコード
<?php }?>
isset関数
引数(変数)の値をチェックする関数。
値有り、かつNULLでは無い…true
それ以外…false
ctype_digit関数
整数かどうかチェック関数。
preg_match(パターン, 文字列);
パターンと文字列がマッチしてるか。
isSet(値);
値があるか。
in_array(値,配列);
配列の中に値が有るか。
is_array(配列);
配列かどうか。
strip_tags(文字列);
HTMLやPHPタグをを取り除く。
mb_substr(文字列, 開始位置, 文字数);
文字列の開始位置から指定の文字数を取得する。
mb_strlen(文字列);
文字列の長さを取得する。
nl2br(文字列,bool値);
文字列の中の改行コードの前に<br>タグを挿入。
・エヌエル2br(ニューライントゥービーアール)。
・bool値は、XHTML準拠の改行を使うか否か。
・trueなら<br />を入れる。
・falseなら<br>を入れる。
DBMS
データベースマネージメントシステム。
・MySQL、Oracle、SQLite、postgre等
UNSIGNED(属性)
正負の桁をやめる設定。
・プラスの値しか必要ない時(IDや年齢)。
AUTO INCREMENT
値が自動的にカウントアップ。
サーバー
サービスを提供する。
・webサーバーやDBサーバー、メールサーバー(POP3等)がある。
PDO(PHP Data Objects)
抽象化レイヤ。
・webサーバーと各種DBサーバー(DBMS)間のプログラムの違いを対応してくれる機能。
try~catch(例外処理)
try{
例外処理が組み込まれているメソッドを実行
} catch(Exception $e){
エラー処理
} finally {
エラーの有無に関わらず実行する処理
}
bindValue(プレースホルダ, 値, 値の型)
プレースホルダに値をバインドする。
・プレースホルダ・・・仮確保した場所
・バインド・・・関連付ける
header関数
// 例 ●●.htmlへ遷移
header('Location:●●.html');
・echoなどの出力前にコードを書く
empty関数
// 例 変数●が空ならtrue
empty($●);
・empty=空
SQLインジェクション対策
フォームからの攻撃防止策。
・プリペアドステートメント(SQL文を変数っぽく準備)
・プレースホルダ(後から値を入れる為の状態)
・バインド(プレースホルダに値を関連づけ)
トランザクション処理
複数のデータ処理時に1つでも処理が失敗したら元の状態に戻す仕組み。
// トランザクション開始
beginTransaction()
// 完了
commit()
// 元に戻す
rollBack()
セッション
WEBページを移動すると変数の値は使用不可になるが、セッション機能を使うと複数のWEBページでセッション変数が利用出来るようになる。
1.ブラウザからWEBサーバーにログインした時にセッションファイルが作成される。
2.セッションファイルにはセッションIDなどがテキストファイルで保存されている。
3.その情報(セッションID等)をブラウザ側で同意を得た上でcookieに保存する。
4.次にアクセスした際にそのセッションID(貸金庫の鍵みたいなもん)でアクセスする。
<?php
// セッションの開始
// これより前にHTMLコードは書いたらダメ
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
// セッション変数(スーパーグローバル変数)
$_SESSION["変数名"] = "値";