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

値がないことを示す特殊な値。

PHPでは型の宣言が必要なく、多くの場面で自動的なキャストが発生する。

明示的にキャストするには、(float)'100' などのようにC言語風にキャストする。
また型を変換する関数もある。

式と演算子

算術演算子
+ 加算
- 減算
* 乗算
/ 除算
% 剰余算
++ インクリメント
-- デクリメント
文字結合演算子
. 文字列の結合
比較演算子
== 値が等しいか
=== 型と値が等しいか
!=または<> 値が等しくないか
!== 型と値が等しくないか
右辺の方が大きいか
> 右辺の方が小さいか
<= 右辺以上か
>= 右辺以下か
論理演算子
! 否定
&& and 論理積
or 論理和
xor 排他的論理輪
ビット演算子
& AND
OR
^ XOR
~ NOT
>> 右シフト(空いた左側には符号ビットが入る)
<< 左シフト(空いた右側には0が入る)
複合代入演算子

代入処理と算術演算処理を組み合わせたもの(+=)など。

三項演算子
条件式 ? オペランド1 : オペランド2

条件式の結果が真ならオペランド1を、偽ならオペランド2を実行する。

その他の演算子
@ エラー演算子
instanceof オブジェクトの種類を確認する
new 新しいオブジェクトを生成する
`` 実行演算子
演算処理の優先順位と結合性

演算処理は演算子の優先順位に基づいて行われる。
結合性とは同じ優先順位の演算子で結ばれた式における処理の順番を示すもの。

配列

PHPの配列の特徴
  • 添字配列と連想配列が同じ配列型として扱われる。
  • 添字配列と連想配列を混ぜて使いことができる。
  • 連想配列は入力順が保障される順序つきマップである
添字配列の初期化
<?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;
}
require/require_once

別のファイルに記述されたPHPスクリプトを読み込むための構文

<?php
require 'ファイル名';
require_once 'ファイル名';
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);
    };
};