[収集中]PHPの文法まとめ

PHPの記述法

php全体の記述

「<?php」と「 ?>」で囲んだ部分がphpとみなされ、「<?php」と「?>」で囲めばhtmlの中にも混ぜて書くことができる。

例1(命令文を挿入)

青字がhtmlで桃字がPHPです。

<h2>見出し</h2>
<p>段落文章</p>
<?php
phpの命令文;
?>
<p>段落文章</p>
<p>段落文章</p>

例2(命令文を分割して挿入)

長い記述の命令文(条件分岐・繰り返しなど)の一部ごとに「<?php」と「 ?>」で囲んで配置できる。青字がhtmlで橙・桃字がPHP。

<h2>見出し</h2>
<p>段落文章</p>
<?php
phpの命令文;
phpの命令文;

?>
<p>段落文章</p>

<?php
phpの命令文開始…
?>
<p>段落文章</p>
<p>段落文章</p>
<?php
…phpの命令文終了;

?>
<p>段落文章</p>
<p>段落文章</p>

例3(まとめて配置)

htmlの前にまとめて配置する例。青字がhtmlで桃字がPHP。

<?php
phpの命令文;
phpの命令文;
phpの命令文;
?>

<h2>見出し</h2>

<p>段落文章</p>
<p>段落文章</p>
<p>段落文章</p>

phpの命令文の記述

一つの命令の最後に「;」をつける。

エラーが出るのは、この「;」つけ忘れが一番多い!!

コメントの記述

一行コメントは「//」の後に続ける。

複数行コメントは「/*」と「*/」で挟む(CSSと同じ)

変数

このサイトが分かりやすい

通常の変数(ローカル変数)

定義した関数・クラスの中でだけ通用する。別の関数では同じ名前でも別の関数として扱われる。

書き方「$変数名=変数の値;」

$name=1;//変数「name」にを1を代入

$name=”Tanaka”;//文字の場合ダブルクォーテーションで囲む

変数の命名

1文字目はアルファベット(a~z)(A~Z)かアンダーバーで、2文字目以降は数字もOK(0~9)

ハイフン(-)はNG

変数の命名法

PHPの変数名には、基本的にローワーキャメル記法「$numUsers」)を使用。

cfアッパーキャメル記法「$NumUsers」
スネーク記法「$num_users」

使用例

$name=”Tanaka”;
print ($name);

結果:「Tanaka」と表示される

変数のスコープ

スコープ

変数が生存できる範囲のこと

関数外で宣言された変数(グローバル変数)は関数外で生存できる(グローバルスコープ)が、

関数内で宣言された変数(ローカル変数)は関数内でしか生存できない(ローカルスコープ)

関数内での計算結果を使うには戻り値を使う。

特別な変数1:グローバル変数

全体(関数外)で共通に使用される変数

使用法

❶グローバル宣言をしておく(多い)

ある変数をグローバル変数として(関数内でも)使いたい場合は宣言をする

global $num;
$num = 10;

❷$globals[“連想名”]を使う(少ない)

予め決められたグローバル変数は、連想配列$globals[]からアクセスできる

定義済みグローバル変数

(例)
変数 概要
$GLOBALS …使用可能な変数の配列
$_SERVER …サーバーの環境情報の配列
$_GET …HTTPのGETメソッドで送信されたパラメータの配列
$_POST …HTTPのPOSTメソッドで送信されたパラメータの配列
$_COOKIE …ブラウザーから送信されたクッキー情報
$_FILES …HTTPのPOSTメソッドのファイル情報の配列
$_REQUEST …$_GET、$_POST、$_COOKIEをまとめた配列
$_SESSION …セッション情報の配列
$_ENV …環境変数の配列
$php_errormsg …PHPのエラーメッセージ
$HTTP_RAW_POST_DATA …HTTPのPOSTメソッドで送信されたデータ
$http_response_header …HTTPの応答ヘッダーの配列
$argc …引数の数
$argv …引数の配列

スーパーグローバル

ローカルスコープでもグローバルスコープでも参照できる算数

(例)$_POST//$_GET//$_SESSION など

特別な変数2:静的変数

関数内の変数は関数が呼び出されるたびに初期化されるのが通常だが、静的変数は初期化されずに値を保持する。

static $変数名;

例えば、関数の再帰的呼び出し(関数内で関数自身を呼び出す)に回数制限をする(無限ループを避ける)のに使われる

変数のデータ型

int(整数値)

 

float(小数値)

 

string(文字列)

 

bool(真偽)

真(true)か偽(false)の二値のどちらかをとる

array(配列)

複数の値(要素)を格納した変数(→後述)

配列

意義

「配列」=配列変数=複数の値(要素)を格納した変数のことで、格納された各要素を識別するための値を「キー」と呼ぶ。

(例1:数字のキー)
$score[1]…複数の値を格納した配列変数「$score」のキー「1」の棚に入っている値

注意*数字のキーは「0」から始まる

(例2:文字列のキー)
$taro[“age“]…複数の値を格納した配列変数「$taro」のキー「”age“」の棚に入っている値

PHPにおける配列

一般的には、キーとして整数を使うものを「配列」と呼び、文字列等を使うものは「連想配列」と区別するが、
PHPではまとめて「配列」と呼んでいる。

配列に値を代入(格納)する

まとめて一気に格納する方法と、1つづつ格納する方法がある。

まとめて格納(初期設定に用いる)

その1(キーを指定してまとめて格納)

(例1:数字のキーの場合)
$array = [
1 => 100,
2 => 200,
3 => “Three Hundred”,
];

結果、配列変数「$array」の[1]に「100」、[2]に「200」、[3]に「Three Hundred」が格納される

(例2:文字列のキーの場合)
$array = [
“name” => “Taro”,
“height” => 170,
“weight” => 60,
];

配列変数「$array」の[“name”]に「Taro」、[“height”]に「170」、[“weight”]に「60」が格納される

その2(キー指定せずにまとめて格納)

(例)
$array=[
100,
200,
“Three Hundred”,//最後の要素のカンマは無くてもOK
];

改行せずともOK
$array=[100,200,”Three Hundred”];

これは以下と同じで
$array = [
0 => 100,
1 => 200,
2 => “Three Hundred”,
];

結果、配列変数「$array」の[0]に「100」、[1]に「200」、[2]に「Three Hundred」が格納される

一つづつ格納(後から追加・変更するのに使う)

$配列名[キー] = 値;

(使用例)
$array[0]=123;//数字のキーに数値を格納
$shikakukei[“name”]=”ひし形”;//文字列のキーに文字列を格納

(注意)
すでに使用している配列では無い変数と同じ名前を使うとエラーになる。
$ans=5;
$ans[3]=4;

配列の名前を変えればOK
$ans=5;
$answer[3]=4;

配列から値を引き出す

配列名とキーを指定して値を引き出す

数字のキー

print($array[0]);//数字のキーを使用。配列変数「$array」のキー[0]に格納されている値を表示

文字列のキー

$height=$shikakukei[“takasa”];//文字列のキーはダブルクォーテーションに入れる。配列変数「$shikakukei」のキー[“takasa”]に格納されている値を別の変数「$height」に代入

変数のキー

$year=2019;
echo $hensachi[$year];//変数をキーとして使用。配列変数「$hensati」のキー[2019]に格納されている値を出力

複数の値を取り出す(展開)

array_slice(配列名,n,m);//配列のn+1番目(番号が0から始まる)からm個の要素を取り出す(削除はしない)。mを省略するとn番目から後の要素すべてを取り出す(削除はしない)。
例)
array_slice($ary,3,2);//配列$aryの前から3+1=4から2個つまり4番目・5番目の要素を取り出す(削除はしない)。

多次元配列

配列の中に、さらに配列を格納したもの

(使用例)
$seito=[//配列$seitoへの格納開始
“taro”=>[//配列要素$seito[“taro”]への格納開始
“sex”=>”m”
“height”=>170
],//$seito[“taro”]への格納終了
“hanako”=>[//配列要素$seito[“hanako”]への格納開始
“sex”=>”f”
“height”=>160
],//$seito[“hanako”]への格納終了
];//配列$seitoへの格納終了

上の配列「$seito」の内容

$seito[taro] $seito[hanako]
[sex] m f
[height] 170 160

注意

多次元配列の記述は「$変数[一次キー][二次キー]」になる。「$変数[一次キー[二次キー]]」ではない。

(例)$_POSTでフォームの中のnameが”example[“age”]”という値を引っ張ってくるとき
正:$_POST[“example”][“age”] 誤:$_POST[“example[“age”]”]

配列に関連する関数

要素を数える~count

count($配列名);

配列の要素の数だけ処理を繰り返す時に回数の上限として使用

(例1:$arrayの要素の数)
for($i=0;$i<count($array);$i++){
処理…;
}
//この例では$iの初期値が0なので、そのまま条件不等式の右辺にする。$arrayの要素が4つなら4回処理を繰り返して終了($i=0,1,2,3)

(例2:$arrayの要素の数)
for($i=1;$i<count($array)+1;$i++){
処理…;
}
//この例では$iの初期値が1なので、+1して不等式の右辺にする。$arrayの要素が4つなら4回処理を繰り返して終了($i=1,2,3,4)

端に要素を加える~unshiftとpush

array_unshift

array_unshift(配列名,追加要素1,追加要素2…);//配列の最初に付け加える

(例)

array_push

array_push(配列名,追加要素1,追加要素2…);//配列の末尾に付け加える

(例)

こちらの御記事が分かりやすい

要素を取り出す(展開)~slice

array_slice(配列名,n,m);//配列のn+1番目(番号が0から始まる)からm個の要素を取り出す(削除はしない)。mを省略するとn番目から後の要素すべてを取り出す(削除はしない)。
例)
array_slice($ary,2,3);//配列$aryの前から3・4・5番目の要素を取り出す(削除はしない)。

端の要素を取り出して削除~shiftとpop

array_shift

最初の要素を取り出して削除する。配列のキーが自動数値(0,1,2…)の場合は、キーが新たに振り直される(全体が1つ前にshiftする)。

(例)
array_shift($hairetsu);//配列「$hairetsu」最初の要素を取り出して削除

array_pop

配列末尾の要素を取り出して削除する。

array_pop($hairetsu);//配列末尾の要素を取り出して削除

複数の要素を削除・削除して置き換え~splice

array_splice(配列名,n,m,値または配列);

配列のn+1番目(番号が0から始まるので)からm個の要素を削除して、値または配列で置き換える

値または配列を省略すると単純に削除するだけで置き換えない。

mを省略するとn番目から後の要素すべてを削除

(例)

要素を連結する~implode

implode(“区切り文字”,$配列名);

 

explode

反対に文字列を分割して配列にするのがexplode

要素を検索する~in_array

完全一致している要素があれば、「true」なければ「false」を返す

in_array(“検索語”,$配列名);

 

配列の操作

要素の一括操作

array_map

 

外部に関数をおく

 

内部に記述

これ便利だ。こちらの御サイト様より

(例)各要素をニ倍にする
$tmp = [1, 2, 3];
$ary = array_map(function($r){return $r*2;}, $tmp);

$ary の要素は [2, 4, 6]になる

定数

変わらない値。一度定義すると違う値を代入できない。

慣習的に大文字で表す

定数の定義

define(“定数名”,値);

(例)
define(“XXX”,3);//定数XXXを3と定義
define(“YYY”,”Hello!”);//定数XXXを”Hello”と定義

演算子

代数演算子

 

余りを求める→「%」

$a=17%3;//$a=2になる

累乗→「**」

$a=2^^3;//$a=8になる

変数型を整数や小数にする「+」

何や???

値を負にする→「-」

何や???

単項演算子

加算子(インクリメント)

変数名++~変数を+1する

例)
$x = 5;//変数xに5を代入
$x++;//変数xは+1されて、6になる

減算子(デクリメント)

変数名– …変数を-1する

複合演算子(代入演算子の発展)

加算

変数名 += n …変数にnを足す

例)
$z=3;
$z+=1;//$z=3+1=4になる

乗算

変数名 *= n …変数をn倍する

例)
$z=3;
$z*=2;//$z=3*2=6になる

文字列結合

文字変数a.=文字変数b
…文字変数aを文字変数bと結合させる

例)
$a=”google”;
$b=”くたばれ”;
$a.=$b;//$a=”googleくたばれ”になる

三項演算子

条件分岐を一行で表す(後述)

演算に関連する関数

概数

小数点以下切り捨て

floor(式または数値・変数) …数値を超えない最大の整数を返す

例1
$a=floor(3.14);//$a=3になる

例2
$b=floor(-3.14);//$a=-4になる

小数点以下切り上げ

ceil(式または数値・変数) …変数の次に大きい整数を返す

四捨五入

round(数値,丸めるケタ数、丸めのモード)
丸めるケタ数はプラスが小数点以下で、省略すると0(整数に丸める)になる。
モードは省略するとゼロから離れる方向に丸める

(例)
$a=(round(53.74));//整数に丸める(54になる)
$a=(round(53.74,1));//小数第一位に丸める(53.7になる)
$a=(round(53.74,2));//53.74のまま
$a=(round(53.74,-1));//十の位に丸める(50になる)

平方根

sqrt(数値・数式または変数) …平方根を出力(15ケタ?)

(例)
$x=sqrt(16);//$x=4になる
$x=sqrt(2);//$x=1.4142135623731になる

三角関数

角度指定はラジアンで行う

角度形式の変換

deg2rad(度数法の数値);//度数法をラジアンに直す

rad2geg(ラジアン法の数値);//ラジアンを度数に直す

種類

sin(ラジアン法の数値)
cos(〃)
tan(〃)

(例)
$angle=sin(deg2rad(90));//90°(をラジアンに直した1/2pi)のsin値(=1)を得る。

逆三角関数(角度を求める)

逆正接(アークタンジェント)

atan2(y座標,x座標)~原点と点(x,y)を結んだ線がx軸と作る角度をラジアンで得る。

(例)
$angle=rad2deg(atan2(10,10));//点(10,10)と原点を結んだ線がx軸と作る角度(ラジアン)を度数法に直す(45°になる)。

文字列

2つの表現方法

ダブルクォーテーション

文字列

シングルクォーテーション

文字列

違い

「” “」は内部の変数が展開されるが、「’ ‘」は展開されない。

例)
$msg=”Hello”;
echo “$msg”;//「Hello」と出力される
echo ‘$msg’;//「$msg」と出力される

ダブルクォーテーションの注意

(PHP側で)変数部分を他の文字列と区別できるように{}で囲むのが良さげ。

(例)
$msg=”hello”;
echo “{$msg}♪”;//「hello♪」と出力される
echo “$msg♪”;//「『$msg♪』という変数がないよ!」とエラーになる。

気づき

htmlに混ぜてタグを出力するような場合は、シングルクォーテーションに入れないとエラーが出やすい!

文字列の連結

ドット(.)を使う


$msg=”Hello”.“World!”;
echo$msg;//「HelloWorld!」と表示される

類似技法(カンマ)

並べて表示するだけならカンマ(,)でも良い。コチラのほうが処理が早くなるらしい。

echo “Hello”,“World!”;//「HelloWorld!」と表示される

文字列に関連する関数

文字数(長さ)を計測

strlen(文字列または$文字変数)

1バイト換算の?文字の長さを返す

(例)
echo strlen(“World”);//→5
echo strlen(“こんにちは”);//→15(3倍になる!)

mb_strlen(文字列または$文字変数)

日本語(2バイト文字)の文字の長さを返す

(例)
echo mb_strlen(“World”);//→5
echo mb_strlen(“こんにちは”);//→5

コツ

入力した文字のチェックの際に、strlenとmb_strlenで計測して値が変わらない場合は全部半角文字だと分かる。
また、ちょうど3倍になっている場合は全部全角文字と分かる。

メモ(見返したら意味不w)

文字列の中に「<?=$●●?>」を入れる場合の連結方法は?
→入れる必要がなかったw単純に「”」でくくった文字列中にむき出しで「$●●」を入れておけばよい。

制御構文

条件に応じて処理を分岐させる

条件式

分岐の判断に用いる式

比較演算子

「==」~値が等しい

値が等しければ真
使用例:if($x==3) //もし$xが3ならば

「===」~型も等しい

型も含めて等しければ真

「!=」「<>」~等しくない

値が等しくなければ真
使用例
if(!$x==3) //もし$xが3でないならば

「<」「>」~

より小さい、より大きい

「<=」「=>」

より少ないか等しい、より多いか等しい

(矢印のようになっているな…)

論理演算子

「and」「&&」~かつ

使用例
if($x1==3 && $x2==5) //もし$x1が3かつ$x2が5ならば

「or」「||」~または

使用例
if($x1==3 || $x2==5) //もし$x1が3または$x2が5ならば

「!」~でない

 

真偽値

偽(false)になるケース
・文字列の場合→文字列が空か”0″
・数値の場合→0か0.0
・論理値の場合→false
・配列の場合→要素の数が0

(例)
$x=5;
if($x){
命令;
}
//「$x」がtrueになって命令が実行される

関数?

isset(変数)

~変数に値がセットされていれば真になる

例1)
if(isset($trigger)){
命令;
}
//変数$triggerに値がセットされていれば命令を実行する

例2)否定で使う例
if(!isset($trigger)){
命令;
}
//変数$triggerに値がセットされていなければ命令を実行する。三項演算子と組み合わせると便利

is_numeric(変数)

~変数が数字または数値形式の文字列(フォームからPOSTで得た数値等)なら真になる

is_int(変数)

~整数なら真になる

preg_match(変数)

~正規表現で判定

 

if構文

if&elseによる二分岐

if(条件文){
____実行命令1;
}else{
____実行命令2;
}

注意:慣例として実行される命令の前に空白。半角スペース4個が標準

三項演算子~条件分岐を一行で♪

$変数名=(条件)? x:y;
…条件を満たす場合は変数にxを、満たさない場合はyを代入する。

(例1)
もし$aの方が大きければ$maxに$aを代入、違ったら$bを代入

$max=($a>$b) ? $a:$b;

これは以下の条件分岐と同じ内容を一行で表している。

if($a>$b){
____$max=$a;
}else{
____$max=$b;
}

例2)頻出
POSTで送信されてきたフォームでvalXが入力されていたらその値を代入、入力されていなかったら30を代入(初期設定値の設定に使う)。

$valX=(isset($_POST[“valX”]))? $_POST[“valX”]:30;

三分岐(if&else入れ子)

三分岐をif&elseだけで表すと複雑になってしまう

if(条件文1){
____実行命令1;
}else{
____if(条件文2){
________実行命令2;
____}else{
________実行命令3;
____}
}

elseif文で三分岐(フラットな構造)

「if」と「else」の間に「elseif」をはさめば分岐が簡単。

if(条件文1){
____実行命令1;
}elseif(条件文2){
____実行命令2;
}else{
____実行命令3;
}

途中のelseifは何個でも増やせるのが便利

switch文

条件が「等しいとき(==)」だけのときはswitch文による分岐が使える

基本使用例

switch(比較対象の変数){
case 値1:
____実行命令1;
____break;
case 値2:
____実行命令2;
____break;
default ://上記のどの条件にもあてはまらない場合
____実行命令3;
____break;
}

break文は「}」の外に出るという命令で、これが無いと後ろにある他の条件の命令文が実行されてしまう。

範囲のような条件判断の例

switch(比較対象の変数){
case 値1:
case 値2:
case 値3:
____実行命令A;
____break;
case 値4:
case 値5:
case 値6:
____実行命令B;
____break;
default :
____実行命令C;
____break;
}

変数が1,2,3の場合はAが、4,5,6の場合はBが、それ以外の場合はCが実行される。

コロン構文

if/switch構文 において、「{」「}」の代わりに「:」「endif;」を用いることができる。(後述のループ構文while、for、foreachでも可能)

htmlとphpを混ぜて書く時に、構文の始めと終わりの対応が分かりやすくなる。

(例)

ループ処理

同様の処理を繰り返す。whileとforがある。

while構文

条件を満たす間、ずっと処理を繰り返す。繰り返しの「回数」でなく「条件」が決まっている場合に使うと便利なようだ。

最小の基本形

while(ループの条件){
実行命令;
}

(使用例)乱数を足していき30を超えたら停止

$sum=0;
while($sum<30){ //条件設定
$rdm=mt_rand(1,15); //乱数生成
$sum+=$rdm; //複合演算子で加算
}
echo $sum; //最後に結果表示

説明書き

(使用例)乱数を足していき30を超えたら停止
$sum=0;
while($sum<30){ //条件設定
$rdm=mt_rand(1,15); //乱数生成
$sum+=$rdm; //条件演算子で加算
}
echo $sum; //最後に結果表示

回数を決める形(for文と同じ機能)

カウンタ変数の初期設定;
while(ループの条件){
実行命令;
カウンタ変数の増加;
}

(使用例)
$i=1; //カウンタ変数の初期値を1に設定
while($i<=10){ //iが10以下の間実行
実行命令;
$i++; //&iを1増やす
}

ループを途中で離脱するbreak

カウンタ変数がループ終了の条件を満たさないうちに、ループから離脱させたい場合は「break;」を使う。

使用例:素数判定プログラム
$num = 15;//判定対象の整数
$i = 2;//カウンタ変数(割る数)
while($i < $num) { //ループ条件(カウンタが判定対象を超えない間)
____if ($num % $i == 0) { //条件:剰余がゼロ
____print($num.”は素数ではありません<br>”);
____break;//ループを抜ける
____}
$i++; //カウンタ変数を1増加
} //ループ終端。始端に戻る
print(“素数判定が終了しました。”);

ただの「break;」または「break1;」はそれを含むループの外に離脱する。
「break2;」は一つ外側のループの外に離脱する。

for構文によるループ

繰り返しの「条件」ではなく「回数」が決まっている場合はfor構文を使うのが一般的なようだ

基本形

for(カウンタ初期設定;ループ条件;カウンタ増減){
____実行命令;
}

(使用例)
for($i=0;$i<=10;$i++){ //ループ開始
echo “{$i}<br>”; //「1」のような文字列を表示
} //ループ終端

上記例では$iが0,1,2…8,9までの10回処理が繰り返される

(2つの条件を入れ子にした使用例)
for($i=0;$i<=5;$i++){ //外側のループ開始
for($j=0;$j<=8;$j++){ //内側のループ開始
echo”{$i}-{$j}”; //「1-2」のような文字列を表示
} //内側のループ終端
} //外側のループ終端

上記例では外側のループが$j=0のとき、内側のループで$iが0,1,2…6,7までの8回処理が繰り返された後、外側のループが$j=1に進んで同じく内側のループが8回くりかえされ…$j=4までの合計8*5=40回処理が繰り返される

forループをbreakで抜ける

ループ内の処理中にif文でbreak;を書けば、条件成立時にループを抜けられる。

whileよりもコチラのほうが安心できるし、処理回数を数えられるし、良さげに見えるが…

(例:乱数を加えていき30を超えたら終了(最大10回))
$sum=0;
for($i=0;$i<10;$i++){ //最大10回のループ設定
$rdm=mt_rand(1,15);
$sum+=$rdm; //複合演算子で$sumに$rdmを加算
echo ‘sum=’,$sum,'<br>’;
____if($sum>30){
____break; //30を超えたらループから抜ける
____}
}
echo’処理は’,($i+1),’回で終了しました。<br>’;

foreach構文

配列の中身を抜き出すループ処理を行う

配列にキーを指定した場合

foreach($配列名 as $key=>$代入する変数名){
____実行命令;
}

(使用例)
$Data=[
“name”=>”taro”,
“age”=>12,
“height”=>165,
“weight”=>50,
];
foreach($Data as $key=>$value){
____echo”{$key}は{$value}<br>”;
}
//「nameはtaro」「ageeは12」…等と表示される

配列にキーを指定しなかった場合

foreach($配列名 as $代入する変数名){
____実行命令;
}

$fruits=[“apple(りんご)”,”orange(オレンジ)”,”grape(ぶどう)”];
foreach($fruits as $value){
echo”{$value}<br>”;
}
//「apple(りんご)」「orange(オレンジ)」「grape(ぶどう)」と表示される

コロン構文

while、for、foreach においても、if同様に「{」「}」の代わりに「:」「endif;」を用いることができる

特にhtmlとphpを混ぜて書く時に、構文の始めと終わりの対応が分かりやすくなる。

(例)

フォームからのデータ受け取り

htmlによるフォーム

書式

入力部品を構成する<input>タグなどを<form>と</form>で囲んだ範囲がフォーム一式になる

(例)
<form …><input type=”text” …><input type=”submit” …></form>

制限

入れ子構造にはできない。

(例)行き先がそれぞれ「A」「B」のフォームを入れ子にするつもりで、このように書いたとしても

<form (行き先A)>
…………
<form (行き先B)>
……b(Bに行かせたいボタンの記述)……
</form>
……a(Aに行かせたいボタンの記述)……
</form>

はじめに出てくるボタンbを押すとAに行ってしまう。

formタグの内容

典型的な例
<form action=”~.html” method=”post”>~</form>

action属性

フォームのボタンを押した時のリンク先を、「action=”送信先のURL”」で指定する

method属性

データの送信方法を「method=”get”」または「method=”post”」で指定

getは中身がアドレスバーで見えてしまうので、機密性がある情報はpostで送信する。

inputタグの内容

フォームを構成する各入力部品を作成する。主な属性はtype(部品の種類),name(送信する変数名),value(送信する変数値)など

inputタグは閉じタグがいらない。

type属性

<input type=”~” … >でフォームの部品の種類を指定する

type=”text”…一行のテキストボックス
type=”checkbox”…チェックボックス
type=”radio”…ラジオボタン
type=”submit”…送信ボタン
type=”hidden”…画面上には表示せずにデータを送信
type=”range”…スライダー
type=”button”…汎用ボタン(JavaScriptと組み合わせて使用するらしい)

name属性とvalue属性

nameは変数名、valueは変数の値。

文字・数値を入力させる場合は<input type=”text” name=”valX”>のようにnameだけ指定。

チェックボックスやラジオボタンの場合は部品ごとに<input type=”checkbox” name=”season” value=”summer” >のようにnameをvalueを書く。

入力に関係なく数値を送る場合は<input type=”hidden” name=”click” value=”on”>のようにvalueを指定

type=”submit”の場合はvalueは送信ボタンに表示される文字を指定する。

PHP側では「$_POST[“変数名”]」として変数値を受け取る(連想配列キーをダブルクォーテーションで囲む)。

nameに配列を指定

キーを指定する場合(配列$Datの[“ag”]キーに格納させたい場合)
<input … name=”Dat[ag]” … >
html側では連想配列キーをダブルクォーテーションで囲まない

キーを指定しない場合は自動で([0],[1]…)割り当てられる
<input … name=”Data[]” … >

size属性

<input … size=”~” … >で表示文字数を指定する(1以上の整数)

placeholder属性

placeholder=”テキスト”で薄いグレーのテキストを表示する

checked属性

<input … checked>で部品が最初からチェックされた状態になる。

disabled属性

<input … disabled>で部品がグレーの選択できない状態になる。

form属性

部品が所属するform要素を指定できる(え!そうなの…)

php側の受け取り

フォームの送信先(<form action=”ココ”>)で記述する

変数名=$_POST[“フォーム側のname”];

「POST」は大文字。php側では連想配列のキーはダブルクォーテーションで囲む。

(使用例)1種類の変数を受け取る場合
フォーム側の記述が<…name=”age”…>の場合
php側は
$var=$_POST[“age”];//変数$varにageの値を代入

(使用例)連想配列(キー指定)を受け取る場合
htmlフォーム側の記述が<…name=”Data[nenrei]”…>の場合(html側では[“nenrei”]でなく[nenrei])
php側は配列全体受け取り→配列から取り出し、と二段階で受け取る
$Data=$_POST[“Data”]; //変数$Dataに配列Dataの値を代入($Dataは配列になり$Date[nenrei]にフォームのnenreiの値が代入される)
$age=$Data[“nenrei”];//配列$Dataから$Data[“age”]を取り出して変数$ageに代入

 

関数

関数の意義

関数=処理をひとまとめにして、再利用できるようにしたもの。

引数ひきすう(Parameters)=関数が処理を完結させるために必要なデータ

戻り値=関数が処理した結果

構文(関数定義)

通常(戻り値がある場合)

function 関数名(引数の型 引数,引数の型 引数,…):戻り値の型
{
処理;
return 戻り値;
}

波カッコは開始行ではなく改行して始めるのが慣例

戻り値と引数の型

省略可(みたい…)

「array」…配列
「float」…小数
「int」…整数
「string」…文字列
「callable」

「bool」

戻り値がない場合

function 関数名(){
処理;
}
//戻り値の型を書くとエラーが出る

引数にデフォルト値を指定

関数呼び出しの時に引数を省略するとエラーが出るのを避けるために、引数にデフォルト値を指定できる。

function 関数名(引数 =デフォルト値,引数,…)
{
処理;
return 戻り値;
}

使用例

可変長引数

引数の個数を自由にする(引数をいくつでも渡すことができる)。引数は配列になる

function 関数名(引数の型 引数)
{
処理;
return 戻り値;
}

引数配列の要素の個数に応じた処理をcount関数で繰り返し回数を決めたforループで行うようだ

使用例()

 

配列を引数に展開する

引数として3ドッツに続いて配列を書くと、配列要素を引数に展開してくれる。

(例)3つの引数を必要とする関数の場合

$配列=[1,2,3];
関数名(…$配列);//1を第一引数、2を第二引数、3を第三引数に展開する

 

ファイル内部の関数呼び出し

標準の呼び出し方

$変数=関数名(引数);

引数を関数に代入して呼び出し、戻り値を得て使用する

特別な呼び出し方

戻り値を必要とせず、処理を実行させるだけの場合
関数名(引数);

引数がない場合でもカッコだけはつける
関数名();

外部ファイルの関数呼び出し

戻り値を$変数として得る場合

require_once(“関数を含むファイル名.拡張子”);
$変数=関数名(引数);

処理を表示させる場合

require_once(“関数を含むファイル名.拡張子”);
関数名(引数);

関数名();//引数がない場合もカッコは必要

可変関数

関数名を表す変数の後ろに「()」を付けると関数として扱うことができる。

$変数=$関数名を表す変数(引数、引数…)

関数名の配列を用意してforeachで展開して次々に処理するのに使う

使用例(3つの関数を連続処理)

function func1(引数,引数…)
{
戻り値;
}
function func2(引数,引数…)
{
戻り値;
}
function func3(引数,引数…)
{
戻り値;
}
$funcNameList=[func1,func2,func3];
foreach($funcNameList as $funcName){
____$result=$funcName(引数,引数…);
}

コールバック関数

引数として変数としての関数を指定したもの

function 関数名(…, callable $func)
~変数$funcとして他の関数を引数にしている

(使用例)
array_map関数~第一引数にコールバック関数を渡して、他の配列要素にその関数を適用する

クロージャ(無名関数)

引数の中で定義を直接記述された関数のこと(無名関数)

使用例

無名関数の変数化(イミフ)

 

 

関数内の結果利用の注意

関数内で宣言した変数「ローカル変数」は関数外では利用できない(未定義関数としてエラーになる)ので、関数内の結果を利用する場合は戻り値を利用する。

逆に、関数外で宣言した変数「グローバル変数」も関数内では利用できない(globalで呼び込めるが推奨されない)ので、関数外の変数を関数内で利用するには引数を利用する。

セッション

$_POSTと同じようなスーパーグローバル変数の一つ。ブラウザ側でなくコンピュータのサーバー側に一時的にデータを保存する仕組み。

ブラウザをリロードしても消えずに残る。

開始と終了

開始

session_start();

終了

session_destroy();//全データの完全破棄

変数の設定と削除

変数の設定

変数は「$_SESSION」の連想配列の値として設定

$_SESSION[‘変数名’]=値;//変数名に$はいらない

$_SESSION[‘配列名’][キー]=値;配列の場合

削除

session_unset();//全てのセッション変数を消去

unset($_SESSION[‘変数名’]);//変数を削除

unset($_SESSION);//全ての変数を削除。使用しないことを推奨されている。

ファイルの読み込み・加工

ファイルの読み込み

file文

ファイルの行ごとに区切って配列に入れてくれる

(使用例)
$line=file(tst.csv);//「tst.esv」の中身を行ごとに区切って配列$lineに格納する。

空白行も一つの要素として読み込んでくれるが、読み込んだ内容に「行末文字」が付いてきてしまう関係で?空白として認識できなかった。
ファイル名の後に「,FILE_IGNORE_NEW_LINES」をつけると「行末文字」が無くなり、空白として認識できた(カタマリの認識として使えそうだ)

explode

カンマなど(delimiter)で区切られた文字列を配列に分割する。

(使用例)
$str=explode(“,”,$file);//$fileの文字列を「,(カンマ)」で分割して配列$strの要素にする。

その他

10進法16進法変換の関数

10進→16進

dechex(数字);

16進→10進

hexdec(数字);

出力:echo ;

基本文法

❶printと違って丸カッコがいらない(関数ではなく文)
echo’文字列<br>’;//「文字列」と出力して改行

$xxx =123;
echo $xxx;//「123」と出力

❷printと違って「,」を使った連結出力ができるecho’文’,’字’,’列’,'<br>’;//「文字列」と出力して改行

$xxx=123;
echo ‘$xxxは’,$xxx,’デス。<br>’;//「$xxxは123デス。」と表示して改行

●式の結果を出力する時は丸カッコに入れるようだ

echo(1+2+3),'<br>’;//「6」と表示して改行

省略形

<?=’Hello’?>//<?php echo’Hello’; ?>と同じ結果

出力:print()とprintf()

print(“文字列”);//「文字列」と出力

print($xxx);//変数$xxxの中身を表示

$xxx =123;
print(“xxxの内容は{$xxx}です”);//「xxxの内容は123です」と出力({}は無くても良い)

printf()

書式を指定して表示

(例)
$x=5.6;
$s1=”hello”;
4s2=”ねこ”;
printf(“%s – %s – %.3f”,$s2,$s2,$x);//文字列(string)、文字列(string)、小数(float)

乱数発生:rand(最小値,最大値),mt_rand(最小値,最大値)

(使用例)
$seed=rand(1 , 10);//変数「$seed」1から10までの乱数を代入する

mt_randは高品質バージョン

変数の内容表示:var_dump(変数名);

(使用例)
var_dump($xxx);//変数「$xxx」の内容を表示する

配列を表示する場合、前後をprint(“<pre>”);とprint(“</pre>”);で囲むと改行などもそのまま表示してくれる。

(使用例)
print(“<pre>”);
var_dump($xxx);
print(“</pre>”);

(echoを使った例)
echo'<pre>’;
var_dump($xxx);
echo'</pre><br>’;

include(),require()

他のファイルを読み込んで実行する

require(‘./header.php’);

include(‘./header.php’);//同じフォルダにある「header.php」の処理がまるっと入る

違い

ファイルの読み込みに失敗した場合、requireは処理が中断されるがincludeは中断されない。

once付き

require_once()とinclude_once()は他のファイルを一回だけ読み込む。

使い分け

重要でないファイル→include();
重要なファイル(関数など)→require_once();

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