PHPの基本的な文法
PHPの記述方法
基本的な記述方法
文の終わりにはセミコロン(;)を記述する
大文字と小文字は区別する
ホワイトスペースは無視される
コメント
<?php #単一行コメント //単一行コメント /*複数行コメント */ ?>
HTML内にコードを書く
<html> <head> </head> <body> <?php //この中にphpのコードを書く //終了タグは省略できる ?> </body> </html>
phpの実行方法
Webサーバー経由でアクセスする場合はsample.phpを設置し
http://example.com/sample.php
とアクセスする。
コマンドラインから実行するには
% php sample.php
出力
echo文print文var_dump()関数を使う
<?php print "Hello World!"; echo "Hello World!"; $a = 1; $b = "foo bar"; $c = array(1,2,3); var_dump($a); //変数の内容を表示する //int(1) var_dump($b); //string(7) "foo bar"
識別子
英字、数字、アンダーバー、アンダーバーが利用出来る。ただし数字は先頭文字に利用出来ない。
予約語は利用出来ない。
変数
変数の宣言
<?php $ 変数名;
ある名前のの変数がセットされているか調べるにはisset()を使う。
<?php $var = 1; var_dump(isset($var)); //true var_dump(isset($var1)); //false
可変変数
PHPではある変数に格納された文字列を別の変数の識別子とみなし、その識別子の変数にアクセスできる
<?php $var = 1; $var_name = 'var'; echo $$var_name,PHP_EOL;
変数のスコープ
グローバルスコープ
PHPブロックの中はグローバルスコープとされ、別のPHPブロックや別のファイルでグローバルスコープに定義された変数は同じようにグローバルスコープで使うことができる。
ローカルスコープ
関数やクラスのメソッド内のスコープ。
このスコープではグローバルスコープなどで定義された変数にアクセスできない。
またローカルスコープで定義された変数は外側からアクセスできない。
定義済み変数
PHPには実行時に自動的に定義される変数がいくつかある。
変数名 | 説明 |
---|---|
$argc | CLIで実行時スクリプトに渡された引数の数 |
$argv | CLIで実行時スクリプトに渡された引数の配列 |
$php_errormsg | 直近のエラーメッセージ |
$HTTP_RAW_POST_DATA | 生のHTTP POSTデータ |
$http_response_header | HTTPレスポンスヘッダ配列 |
$_SERVER | スーパーグローバル変数 |
スーパーグローバル変数
あらゆるスコープから参照可能な変数。
実行環境の情報やWebアプリケーションへのパラメータなどの情報を保持している。
変数名 | 意味 |
---|---|
$GLOBALS | すべてのグローバル変数への参照を持つ連想配列 |
$_SERVER | スクリプトのヘッダ、パスなどの情報を持つ連想配列 |
$_GET | 現在のスクリプトに渡されたURLパラメータの連想配列 |
$_POST | 現在のスクリプトにHTTP POSTで渡された変数の連想配列 |
$_FILES | 現在のスクリプトにアップロードされたファイル情報を持つ配列 |
$_COOKIE | HTTPクッキーから渡された変数の連想配列 |
$_REQUEST | $_GET $_POST $_COOKIEをまとめた連想配列 |
$_SESSION | 現在のスクリプトで使用できるセッション変数 |
$_ENV | 現在実行されている環境変数の連想配列 |
定数
<?php define('ABC','defg'); //define()関数による定数定義 const ABC = 'defg'; //constキーワードによる定数定義
定義済み定数
定数 | 意味 |
---|---|
PHP_VERSION | 実行しているPHPのバージョン |
PHP_OS | 実行しているOSの種類 |
PHP_EOL | 実行された環境での改行コード |
STDIN | 標準入力ストリーム |
E_WARNING | Warningのエラー番号 |
マジック定数
その定数が記述された場所によって動的にその値が変化する定義済み定数
マジック定数 | 意味 |
---|---|
__FILE__ | ファイルのフルパスとファイル名 |
エラー
PHPには3種類のエラーがある
- パースエラー(シンタックスエラー) PHPの文法が間違っている
- 実行時のエラー 実行が中断されるエラー(Fatal Errorなど)
- 警告・注意 実行は継続するが警告がある(WarningやNoticeなど)
エラーの種類とエラー定数
PHPのエラーには発生するエラーに応じてエラーレベルが決まっている
エラー | 説明 |
---|---|
E_PARSE | 文法エラー |
E_ERROR | 実行時の致命的なエラー、定義されていない関数を呼び出すなど |
E_WARNING | 実行時の警告、呼び出す関数の引数の型を間違えるなど |
E_NOTICE | E_WARNINGより重要度が低い警告 |
E_DEPRECATED | 過去の文法や関数が現行のバージョンでは非推奨になっている場合の警告 |
E_STRICT | 互換性維持のため変更した方が望ましい記述があった場合の警告 |
ユーザーエラー | 任意のタイミングで開発者がエラーを発生できる。trigger_error()関数かユーザーエラー用の定数を使う |
データ型
変数を使用する際明示的に型を宣言する必要はない
PHPには8つの型がある
整数
10進数、先頭に0xを付けた16進数、先頭に0を付けた8進数が指定可能。
浮動小数点
小数点を含む実数、指数表記の指定が可能。
文字列
''または""を用いて初期化する。""の中の$から始まる変数名やエスケープシーケンスは展開される。
論理値
0,0.0,"","0",null,false,要素数が0の配列,空のタグから作成されたSimpleXMLオブジェクト,がfalse、それ以以外はtrue。
配列
PHPでは添字配列と連操配列が区別されていない。後で詳しく。
オブジェクト
さまざまなデータ型のデータ値の集合体。後で詳しく。
リソース
オープンされたファイルやデータベース接続など何らかの外部リソースへの参照を保持している
キャストすることは出来ない。
null
値がないことを示す特殊な値。
式と演算子
算術演算子
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余算 |
++ | インクリメント |
-- | デクリメント |
文字結合演算子
. | 文字列の結合 |
比較演算子
== | 値が等しいか |
=== | 型と値が等しいか |
!=または<> | 値が等しくないか |
!== | 型と値が等しくないか |
右辺の方が大きいか | |
> | 右辺の方が小さいか |
<= | 右辺以上か |
>= | 右辺以下か |
ビット演算子
& | AND |
OR | |
^ | XOR |
~ | NOT |
>> | 右シフト(空いた左側には符号ビットが入る) |
<< | 左シフト(空いた右側には0が入る) |
複合代入演算子
代入処理と算術演算処理を組み合わせたもの(+=)など。
配列
添字配列の初期化
<?php array([要素 [,...]]); $fruits = array('apple','banana','orange'); //上記と等価 $fruits[] = 'apple'; $fruits[] = 'banana'; $fruits[] = 'orange';
連想配列の初期化
<?php array([キー => 要素 [,...]]); $fruits_color = array('apple' => 'red','banana' => 'yellow','orange' => 'orange);
制御文
if文
<?php if (条件) { }
else if文
<?php if (条件) { } else if (条件){ } else{ }
for文
<?php for (i = 0; i < 10; i++) { }
foreach文
<?php foreach ($array as $value) { }
while文
<?php while (0) { }
do/while文
<?php do { } while (0);
switch文
<?php switch (x) { case 0: break; default: break; }
break文
continue文
return文
exit文
関数
関数の定義
<?php function [&] 関数名 ([引数[,...]]){ //関数の中身 }
PHPでは返り値や引数の型を指定する必要がなく、タイプヒンティングを使わない限りどのような型でも渡すことができ、どのような型でも返すことができる。
返り値に参照を用いる場合は関数名の前に&を付ける。
タイプヒンティングとは、引数に渡されるべき値を特定のクラスまたは配列に限定すること。
<?php function array_output (array $var){ // }
この関数は配列を受け取るが、引数にタイプヒンティングを指定しているため配列以外を渡すとエラーになる。
関数の呼び出し
<?php $first_value = array_shift($array);
コールバック関数
引数に関数を指定すると特定の処理にその関数を呼び出すような関数がある。
このときに引数に与える関数をコールバック関数と呼ぶ。
参照による引数と返り値
関数に渡す引数を参照で受け取る場合、引数のリストに&を付けて関数の定義をする。
また関数の返り値に参照を用いたい場合は関数名の前に&を付けて関数を定義する。
無名関数
関数名を道いて定義する関数ではなく、名前のない関数。
<?php $add = function($v1,$v2){ return $v1 + $v2; };
コールバック関数を引数にとる関数を使う際にも使用できる。
<?php $escaped = array_map(function($value){ return htmlspecialcharas($value,ENT_QUOTES); },$array);
クロージャ
関数内に現れる変数の名前解決が、ローカルスコープだけでなく関数が定義された場所のスコープも含めて行われる関数のこと。
PHPでは無名関数を定義する際に、use()構文を用いて関数内で利用する変数を指定する。
これによりその無名関数が定義されたスコープにおける変数をその関数内で使用することができる。
<?php //$my_powに定義した無名関数は引数に受け取った$times分べき乗を行う関数 $my_pow = function($times =2 ){ return function ($v) use (&$times){ return pow($v,$times); }; };