ざっくりPHP入門(初心者〜中級者向け)

目次

基本的な仕組みに関して

※<?php ?>で1ブロック。複数ブロックがあっても全て繋がってるのでブロックをまたいで処理可能

※「;」で終わるまでは改行や空白・スペースは無視される

※1つのファイルにphpのみ記述する(htmlなどない)なら最後の「?>」は省略しても良い

phpのコンパイルと実行

phpプログラムは「レキサー」と呼ばれるものでphpプログラムを解析し、構文をばらばらにのトークンへ分解する。

そして、「パーサー」と呼ばれるものがトークンをオペコードへ変換。

そのオペコードが実行される。

echoの仕組み

echoは評価値を文字列型へキャストしてから出力している

(なので、falseなど論理値は表示されない)(小数1.0は1になる)

※小数点も表示したいならprintfを使う

issetとemptyの違い

emptyは、0、””、nullがセットされていても、falseと評価。

issetは、nullの場合にfalseと評価

エラー関係

エラーは大まかに3種類。

1.コンパイル出来ない(実行以前で止まる) ➡ シンタックス(パース)エラー(syntax error)

2.実行が停止するもの ➡ フェイタルエラー(fatal error)

3.実行は継続されるが警告のでるもの。 ➡ 警告(warning)、注意(notice)

1は文法の間違いなどでコンパイル出来ないなど。

2は定義してない関数を呼び出そうとした場合など。

3は初期化してない変数をいきなり使ったりなど。

エラーの重要度高い順

E_PARSE

E_ERROR

E_WARNING

E_NOTICE

E_DEPRECATED

E_STRICT

E_DEPRECATED,E_STRICTはコーディング規約に関しての問題や将来的に廃止になる(非推奨)機能が使われている場合に発生。

ログを取る

ログというのはプログラムがどこまで動いたかを記録したもの。

エラーになった時にどこでエラーになっているのか判断しやすくなる。

@「アットマーク」でエラー非表示

phpでの@(アットマーク)はエラー制御演算子で、関数や変数の前につける。

これを付けた関数や変数でエラーを出力しないようにする。

変数に関して

変数名の前に「$」をつけて宣言する。変数名の大文字小文字は区別される。

可変変数

変数の中に変数がある感じのもの。

baa」になってまたそれが評価されて中身の「1」が表示される。

変数のスコープ

javaでいうところの変数の前につくprotectedやprivateみたいなもの。

変数が参照(使える)範囲のこと。

グローバルスコープ

<?php ?>のブロック中に書かれたものは別のブロックやファイルでも使える。

ローカルスコープ

関数やクラスのメソッド内で宣言されたものはその中だけしか使えない。

スーパーグローバル変数

どこからでも使える変数。PHP実行時に自動的に定義される。

GETやPOSTなどもこのスーパーグローバル変数。

定数

甘いという文字列が入ったMOMOという名前の定数を定義してる。

※定義可能なのは整数、小数、文字列のみ。配列やオブジェクトはダメ。

※定数名は大文字、小文字区別される。

phpには8つの型がある。メソッドによって自動でキャストされたりする(動的型付け言語)ので、どのタイミングでどうなるのかを把握しとく必要がある。

自動キャスト

・フォームから入力されてきた値は全て「文字列」なので注意!!

・if文などで比較する時も「$value = 1」とすると文字列の中身を整数へ自動キャストして比較している!!

・比較する時に数値っぽい文字列は数値へ自動キャストされる。

※”012345″と”12345″を「==」で比較すると「同じ」とみなされる

ヒアドキュメント

長い文字列を””や”で変数に格納するのは面倒なので、そういう時に使える。

「変数 = <<
文中に「{}」をつけて変数を書けば展開される。

※「EOI」じゃなくてもなんでもいい

※閉じる時の任意の文字列(この場合は「EOI;」)のある行には他の文字や空白などが含まれてるとエラーになる

論理型

BOOLEAN。真偽値を扱うもの。

if文などで論理型と論理型以外を比較すると自動的に論理型へキャストされて比較される。

整数0や空文字”、文字列の0、要素数が0の配列、nullは「false」と同じ。

null

nullが代入されてるもの、値が何もはいってないもの、unset()されてるものは「null」

nullが入っている変数は「定義された変数」とみなされる。

文字列

「.」で連結できる

if文以外の条件式記述方法

if文を書くより分量少なくてすむ。

※もし、変数aが空じゃなければ変数aを代入。空なら文字列noneを代入する。

ページを移動する

headerファンクションはhtmlが出力される前に実行しないとダメ。

ページを移動する

他のphpファイルを読み込む

その他に

もある。違いは、requireの場合は読み込みエラーになったら実行停止するが、includeは警告のみ。

check.phpを1回だけ読み込ませる。

なので、各ページで同じ処理をする場合は1つのPHPファイルにその処理を書いて、

各ページでそのファイルを読み込む様にすればいい。

でもいい。違いはよく分からない。

配列

phpの配列はハッシュやマップなどの区別はなく、全部「連想配列」。

どんな型の値でも入れられる。

キーが重複してた場合は上書きされる。

配列の初期化

ブラケット「[]」をつけると、その変数は「配列」として初期化される。

色々な配列の書き方

配列への値の追加・削除

追加
配列の末尾に追加
配列の末尾を削除

連想配列を使う

連想配列として追加
連想配列の値を取り出す
連想配列の値を全部取り出す

時刻を取得する

またはもっと簡単にするなら

という感じで、

dateの中にパラメータを「G」とか「M」とか入れれば、「年」や「月」が取得できる。

※Warningが表示された場合

PHP5.1.0から「タイムゾーン」を設定する必要が有るため。Dateを使う前に

<?php date_default_timezone_set(‘Asia/Tokyo’); ?>

を追加すればOK。

時刻を日本時間に変更する

php.iniの設定を以下に変える

 

date.timezone = Asia/Tokyo

 

フォーム関係

フォームの値を取得する

複数選択のチェックボックスやリストボックスの値を取得

値は2次元配列で入っている。

という形で、name属性を配列にして、下のように2次元配列の形で取得する。

複数選択のボックスの値を取得

フォームに入力された値を表示する時のセキュリティ対策

フォームからjsなどのスクリプトをそのまま送られると実行されてしまうので、回避する。

ラジオボタンやチェックボックスにも使うこと!

htmlspecialcharsファンクション

「ENT_QUOTES」はシングルクウォーテーションも変換して回避するよ。というもの。

定数なので、ただの「3」でもいい。

フォームの値をチェック、変換する

半角の「数字」かチェックする

半角数字かチェックする

全角英数字を半角英数字へ変換する

全角英数字を半角英数字へ変換する

「a」だと半角英数字へ。「n」にすると全角数字➡半角数字へ変換する。

他にも「」に何を入れるかで変換の仕方が違うので調べてみてね。

フォームに入力された内容が正しい形式か、正規表現を使ってチェックする

例)郵便番号を正規表現を使ってチェックする

チェックボックス・ラジオボタンやリストボックスの値を記憶しておく

という感じで、

もしPOSTに値が入っていて、かつ、その値がボックスのvalueと同じなら属性にselectedをつける。

とやればいい。

※チェックボックスやラジオボタンはselectedのかわりに「checked」をつければいい。

次ページへ値を渡す

aタグで渡す

headerファンクションで渡す

※headerファンクションが実行されるまでに文字列などが出力されてしまっていると実行されない。

「Location : $url」という形で間空けてあると実行されないので注意!!

Cookie(クッキー)を使う

Cookieを使ってフォームに入力された値を記憶しておく

クッキーは時間指定をしてあげて、その時間が経ったらブラウザ側で破棄される仕組み。

1週間自動ログイン機能などに使える。

【処理順序】

1. まず、クッキーがあるかどうか確認

2. なければ、あげる(作る)

3. あれば、読み込む

Cookieを使ってフォーム内容を記憶

「setcookie」はヘッダーが送信される前に渡さないとエラーになるので注意。

timeは60秒×60分×24時間×7日で1週間になります。

セッション(SESSION)を使う

セッションはブラウザが閉じられるまでの間だけ保存できる仕組み。

会員登録時のフォームデータ記憶などに使える。

クッキーを使って、IDを受け渡して、次回訪問時にそのIDを元にデータを引っ張ってくる。

クッキーがOFFになってると使えない!!

※毎ページでセッションスタートさせてデータ取り出しする必要があるので、セッションスタートを省略したいならphp.iniファイルを書き換える。

※違うPCでセッションIDが読み取られれば、そのIDを使ってデータ取得出来てしまうので、

他にもIPアドレスを調べたり、ブラウザ種類でマッチさせたりと確認して認証する必要が有る。

データベースへのアクセス

PHPではMySQLデータベースへのアクセスには、PEAR DB、 PEAR MDB 、PEAR MDB2 、MySQL拡張モジュール、mySQLi 、PDO など色々な方法がある。

PDOを使ったMySQL

pdoはjavaのやつみたいにDBがポスグレだったりmysqlだったりしても同じ形式で書けば、変換してクエリーを出してくれる仕組み。

Windowsで使うにはphp.iniの設定が必要。

Pdoを使うにはpdoクラスのオブジェクトを作成して使う。

dbへの接続

※文字コードは「UTF-8」じゃなくて「utf8」だから注意!!

SQL文(クエリー)作成

プレースホルダに値をセット

SQL文実行

結果を1件ずつ処理

dbを閉じる

PHPスクリプトが終了すればデータベースへの接続は閉じられますが、明示的に閉じる場合には作成したPDOクラスのオブジェクトに”NULL”を代入します。

dbを閉じる

SQL文書いて処理を行う

1回だけ使用するようなSQL文をデータベースへ送信するにはPDOクラスで用意されている”query”メソッドを使います。

1回だけ使う場合のSQL文

preparedstatementを使ったSQL文

繰り返し使いそうなSQL文はプリペアードステートメントというSQL文のひな形をまず作ってから、

値を入れて実行する。

値の入れ方は2通り。「?」を使うものと「:name」などの名前つきパラメータを使う方法がある。

?を使う場合
名前つきパラメータを使う場合

SELECTで結果を取得する

PDO::FETCH_NUMを指定した場合は下記のようになります。

PDO::FETCH_ASSOCを指定した場合は下記のようになります。

PDO::FETCH_BOTHを指定した場合(又は引数を省略した場合)は、どちらの形式でも利用が可能です。

取得したデータをフェッチしてループで使う

INSERTで挿入したデータのIDを取得する

ページング機能をつける

SELECTのクエリーの最後に「LIMIT 10」という形でつけると、1ページに表示される件数が10件になる。

ページング

LIMITが「1,5」「5,5」「10,5」と増えていって表示する件数を指定できる。

文字列操作

文字を切り取る・切り抜く・抜き出す

「-(マイナス)」で指定すれば、後ろから何文字を抜き出す。

引数を二つ指定すれば、「何文字目から」「何文字分を」抜き出す。

文字を丸める(一定文字以上は…にして省略するとか)

※変数aの中の文字列を0から10まで(日本語は2つで1文字)表示し、それ以上のものは..にする。

文字化けする場合は、最後に文字コードをつける。

※Mysqlと違って’UTF-8’と書くので注意!!(”を忘れないこと。大文字で書くこと。)

ファイル操作

ファイル読み込み

読み込みと表示を同時に行う場合

ファイルに追記

RSSやWebAPIなどで使われているXMLファイルを読み込む

※PHP5から使えるようになったファンクション

ファイル書き込み

※パスワードなど見られたら困るファイルはドキュメントルート(httpdocs,htdocsなど)の外に設置すること。

(URL打ち込むと見れちゃうので)

画像ファイルなどのアップロード

アップロードされた画像の受信

画像ファイルの移動

フォーム画面から確認画面へ移る際、指定された画像を一時保管からサーバへ移すが、

確認画面から「戻る」を押した場合、ファイルが残ってしまうので、

いったん、一時保管からサーバ上の一時保管へ移し、登録完了時にサーバ一時保管からサーバの画像フォルダへ移動し、

戻るボタンを押した際には、サーバの一時保管ファイル内画像を消去する時などに使える。

移動元パスと移動先パスを入れる。

ユーザ登録画面

カレンダー作成

WEBプログラミングから起業までを一貫して学べるオンライン動画総合学習サービス『ウェブカツ!!』

様々なプログラミング学習サイトやサービスでは正直な所、自分でWEBサービスを作れるようにはならないため、「自分でWEBサービスを作れるようになる!」をゴールとしたオンライン動画総合学習サービス『ウェブカツ!!』を立ち上げました。興味ある方は登録よろしくお願いいたします。

http://webukatu.com/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?