PHPの勉強 ④
今回はdotinstallのPHP入門についてをまとめます。
わかったこと
・PHPのプログラムを試しに実行したい場合
ビルトインwebサーバを使う。
まずip -aコマンドでローカル環境のIPアドレスを確認する。
PHP -s 確認したIPアドレス:ポート番号でビルトインwebサーバにアクセス。
終了時はctrl+cでサーバを終了できる。
・変数→データにつけるラベルのこと
・データ型
文字列→string
数値→integer(整数)/float(少数)
論理値(真偽値)→true,fales
配列
オブジェクト
・var_dump→変数のデータ型と値を返す。他に今いる行やファイル名、ディレクトリ名を表示できる。(__LINE__)など
・定数→変更されない値につけるラベルで、defineを用いる。
・演算子→**(べき乗), 単項演算子(1を足す演算子で++や--のこと)
・文字列の「" "」と「' '」の違い
「" "」→特殊文字と認識、変数の展開
「' '」→文字列としてのみ認識、↑のようなことはできない。
・if文の省略
$max = ($a > $b)?$a:$b;
これは
if($a >$b){
$max=$a;
}else{
$max = $b;
}
・switch文
変数がとりうる値がいくつか決まっているとき、それに対して処理を振り分ける。
caseを使って処理を分岐
・while文とfor文の違い
whileもforもループ処理を行うが、
forは繰り返す回数があらかじめはっきりしている
whileは繰り返す回数がはっきりしていない(無限ループが起こりうる)
例でいうと、煮込み料理をする際、煮込み時間がはっきりしているかいないかのようなもの。
・コロン構文(配列)
foreach(条件):
処理内容;
endforeach;
コロン構文はHTMLに直接埋め込むなどの際に便利
構文の形で(while,forなど)でendから後ろは変わる。
・関数を作る
引数→関数を引き出す時に渡す値のこと
関数の中身を定義→function 関数名($引数)→echo "$引数";
例
Outputname("山田")→関数の中身を定義
function Outputname($name)→Outputnameという関数を定義
echo '$name'; →$nameという引数から関数を引き出す。
・ローカル変数
関数内で定義した変数→その関数内でのみ有効
例
$name = "nakata";
public function userName($name){
echo '$name = "shimizu";
}
var_dump($name);
最初に$nameにnakataという値を代入し、次にuserName関数を定義し、そこに$name= "shimizu"と入力したとする。
関数の外で$nameの中身を確認すると、結果はnakataが出てくる。
関数内での変更は関数内のみでしか適用されない。
・組み込み関数
小数点以下に関する組み込み関数
ceil→切り上げ
floor→切り捨て
round→四捨五入
rand→乱数の作成
strlen→マルチバイトの文字の文字数を取得
printf→printf("%s -%s -%f, $s1,$s2,$x")のようにして、出力する。
count→配列の要素数を数える。
implode→配列の要素数を区切り文字で連結し、文字列で返す。
・継承
前に作ってあるクラスのプロパティやメソッドの構造を保持しつつ別のクラスを作成
オーバーライド→親クラスのメソッドやプロパティを上書きできる。メソッドやプロパティの定義の際にfainalを付けることで禁止もできる。
fainal public function ~というように
・アクセス権
praivat→クラス内でのみアクセス可能
protected→そのクラスと親子クラスからのみアクセス可能
public→どこからでもアクセス可能
・staticについて
通常だとメンバ($tom = newUser("Tom")とインスタンスを生成した場合の$tomのこと)はインスタンスに属する。
同じクラス内でも、それぞれのインスタンスで独自の値を保持する。
対してstaticはクラスそのものに属するので、インスタンスのメンバとは直接の関係がない。
→インスタンスを生成せずにメソッドが使える(インスタンスを生成しないので()内は空白になる)
・抽象クラスと実装の違い
意味合いの違い
抽象クラス→複数のクラスの共通部分を抽出後に1つのクラスとして扱う。処理の中身は違うが必要なメソッドを抽象クラスとして定義し、
各クラスはこの抽象クラスを継承(引き継ぎ)して独自の処理をする。
実装→インターフェイスで定義されているメソッドの存在を保証し、実装するクラスの扱い方を筋道立てる。
・外部ファイルの読み込み
require→fatal_error(致命的なエラー)を表示後に処理を終了する。
include→warning(警告)を表示するが処理は継続する。
→onceをつけると読み込む回数を1回にする。
・名前空間
class,関数,インターフェイスなどの名前を被らないようにする。
必ずファイルの先頭に指定する<html>よりも前に。
namespace 名前で定義→階層的に管理も可能 名前の後ろに\(バックスラッシュ)フォルダ名など
別名を付ける
use 名前\フォルダ名asフォルダ名;
・例外処理
まず関数を定義
その後にtryで例外を定義する。
try{
if(){
処理内容;
throw new Exeption 処理内容}catch Exption {
try→例外処理の定義
thrownew→新しい例外をなげる
catch→例外が投げられた時の処理内容
・アンケートフォームなどからデータを受け取り処理する
<?php
$userName="";
if($_SERVER['REQUEST_METHOD'] === 'POST'){ →サーバー側にアクセスして何らかの投稿を受け取っているとき
$userName = $_POST['$userName']; →$POSTから$userNameを受け取って、$userNameへ代入
$err = falese;
if(strlen($userName > 8){ →受け取ったusernameが8より大きい場合に
$err = true;
}
}
?>
これをまず<!DCTYPE ~>の上に定義
その後HTML本文中の<formタグの中に
<?php if($err){echo 'Too long!'; ?> →$errの内容がtrueの場合、Too long!を表示する
を入れる。
一緒にvalue = "<?php echo htmlspecialchars($userName,ENT_QUOTES,'UTF-8'; ?>というエスケープ関数も入れておく
・cookie
アクセスしてきたブラウザ側にデータをセットする
複数のページのデータ保持に使う。
第3変数で有効期限を決められる
set cookie(〇〇,〇〇, Time() +60*60)→1時間後にリセット
未設定の場合はページを閉じるまで
削除はset cookie(〇〇,〇〇, Time() +60*60)をset cookie(〇〇,〇〇, Time() -60*60)にする。
有効期限を過去のものにする。
・session
サーバ側にデータをセットする
session_start();
$_SESSION[ ]→セッションの内容
echo '$_SESSION[ ]' → 出力
終了
unset