PHPオンライン学習

チュートリアル一覧

初級 中級

カテゴリの選択:

説明
Hello World 文字を出力するには、echo文を使用します。echoの後にダブルクォート(")で囲って文字列を指定します。文の区切りにはセミコロン(;)を記述します。以下のように記述してコードを実行してみましょう。
変数 変数は値を格納しておく箱のようなものです。変数には先頭に$記号を付けます。変数名にはアルファベット、数字、アンダースコア(_)が使用できますが、数字から始まる変数名は許可されません。変数名は慣例として最初の単語は小文字、それ以降は単語の先頭のみ大文字(キャメル記法)で定義します。代入には代入演算子である=記号を使用します。=の左辺には変数名、右辺には代入する値(式)を指定します。以下では変数$strに文字列"こんにちは"を代入し、echo文で変数$strを出力します。
コメント文 コード中にコメントを挿入する場合は、コメントの先頭に//を付けるか、/*と*/で囲みます。後者は複数行をまとめてコメントにする場合に便利です。コメントはPHPコードの実行時に無視されます。
整数 数値の表記方法には10進数8進数16進数2進数の4つがあります。8進数値は先頭に0を記述します。16進数値は先頭に0xを記述します。2進数値は先頭に0bを記述します。また、それぞれ正数(先頭に+を付与(省略可能))と負数(先頭に-を付与)があります。echo文で変数値を出力した場合、10進数に変換されて出力されます。各変数値がどのように出力されるかを試してみましょう。
浮動小数点数 浮動小数点数は通常の表記方法と指数を用いた表記方法があります。指数部には先頭にEを記述します。echo文で変数値を出力した場合、小数点以下が0のみの場合は小数部は省略されて出力されます。各変数値がどのように出力されるかを試してみましょう。
文字列 文字列はシングルクォート(')まはたダブルクォート(")で囲んで指定します。また、ダブルクォートで囲んだ場合はエスケープシーケンスが使用できます。エスケープシーケンスには、改行(\n)、復帰(\r)、タブ(\t)、ダブルクォート(\")、バックスラッシュ(\\)、ドル記号(\$)などがあります。
論理値 論理値は真偽値を表し、条件文で使用されます。真のキーワードはtrue、偽のキーワードはfalseです。false以外の値はtrueと見なされます。falseと見なされる値は、00.0空文字("")要素数がゼロの配列NULL値です。なお、==は比較演算子となり、左辺と右辺の値が等しければtrue、等しくなければfalseを返します。
1次元配列 配列は複数の値を格納する連続する箱のようなものです。配列には0から始まる連番(添字(そえじ))が先頭要素から自動で割り振られます。配列を作成する場合は、配列名[添字]に値を代入するか、array()関数を使用します。複数の値を配列に格納する場合は一般的にarray()関数を使用します。
多次元配列 多次元配列は配列の要素内にさらに配列を格納(配列を入れ子)した配列です。多次元配列を作成する場合は、配列名の後に配列名[添字][添字]のように要素の階層を指定します。
連想配列(Map) 連想配列は要素がキーと値の組み合わせで構成される配列です。連想配列を作成する場合は、array("キー" => "値", "キー" => "値")のように指定します。通常の配列とは異なり添字ではなくキーを指定して値を取り出せます。
算術演算子 算術演算子には加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)があります。※剰余は割った余りを返します。乗算と除算は加算と減算よりも優先度が高くなります。加算と減算を優先させる場合は()で囲みます。
代入演算子 右辺の式の計算結果を左辺の変数に代入する場合に代入演算子(=)を使用します。また、右辺の式内の変数と左辺(代入先)の変数が同一である場合、算術演算子と代入演算子をまとめて記述(+=など)することもできます。
インクリメント・デクリメント演算子 インクリメントは値を1つ加算する演算子(++)、デクリメントは値を1つ減算する演算子(--)です。演算後に代入も一緒に行います。ループ文などで、ループするごとに変数値を増やす、あるいは減らしていきたい場合に使用されます。また、変数値を返した後にインクリメント・デクリメントを行う後置型、変数値を返す前にインクリメント・デクリメントを行う前置型があります。アルファベットの場合はインクリメントは1つ後の文字、デクリメントは1つ前の文字となります。
文字列連結演算子 文字列を連結するためにはドット(.)を使用します。ドット演算子は左側の文字列と右側の文字列を連結してその結果を返します。
比較演算子 比較演算子は左辺と右辺の値を比較し、その結果が真ならtrue、偽ならfalseを返します。比較演算子には、値が等しい(==)、値と型も等しい(===)、値が等しくない(!=または<>)、値と型のどちらかまたは両方が等しくない(!==)、より大きい(>)、より小さい(<)、以上(>=)、以下(<=)があります。左辺と右辺の型が異なる場合、暗黙の型変換を実施した上で比較します。例えば左辺と右辺のいずれか、または両方が「数値形式の文字列」であれば数値に変換して比較します。左辺または左辺と右辺の両方が「数値形式ではない文字列」の場合は辞書順で比較します。
ビット演算子 ビット演算子は2進数値の演算を意味します。ビット演算子には否定演算子(~)、AND(論理積)演算子(&)、OR(論理和)演算子(|)、XOR(排他的論理和)演算子(^)、左シフト演算子(<<)、右シフト演算子(>>)があります。否定演算子はビットを反転させます。AND演算子は両方が1であれば1、どちらかが0であれば0となり、一般的にマスクに使用されます。OR演算子は両方が0の場合のみ0となります。XOR演算子は両方の値が異なれば1、同じであれば0となります。左シフト演算子は右辺の数だけ左辺の2進数を左にずらします。右シフト演算子は右辺の数だけ左辺の2進数を右にずらします。ずらした場所は0で埋められます。
if文 if文は式に合致した場合にifブロック内の文を実行します。2つ目以降の条件はelse if文で指定します。どの式にも一致しなかった場合に実行するコードはelse文に記述します。構文:if (式) { 文 } else if { 文 } else { 文 }
switch文 switch文ではswitch文に指定された値を上から順番にcase文に指定された値と比較していきます。caseに指定した値と一致する場合、該当のcaseブロックの文を実行します。どのcaseにも合致しなかった場合は、defaultブロックの文を実行します。caseに合致した場合にそれ以降のcaseの比較を実施しない場合は、breakキーワードを指定します。
while文 while文は式の結果がtrueの間は繰り返し文を実行します。式の結果がfalseになればループを抜けます。構文:while (式) { 文 }
for文 for文はwhile文とは異なり、式1に開始値、式2に条件、式3に増分を指定し、式2の結果がtrueの間は繰り返し文を実行します。式2の結果がfalseになればループを抜けます。構文:for (式1; 式2; 式3) { 文 }
foreach文 foreach文は配列用に作られたfor文です。配列の要素を順番に取り出し文を実行します。配列変数の後に、asキーワードに続けて要素を格納する変数、もしくはキーを格納する変数=>要素を格納する変数を指定します。構文:foreach(配列変数 as 要素を格納する変数) { 文 } または foreach(配列変数 as キーを格納する変数=>要素を格納する変数) { 文 }
関数定義 関数はある値を入力(引数:省略可)し、処理を実行し、その結果を返す(戻り値:省略可)プログラミング言語の機能です。関数定義にはfunctionキーワードに続けて関数名(引数)を指定し、その後に(複数行の場合はブロック{}で囲んで)実行する処理を記述します。結果を返す場合(戻り値)return文を使用します。関数名は慣例として最初の単語は小文字、それ以降は単語の先頭のみ大文字(キャメル記法)で定義します。構文:function 関数名(引数) { 実行する処理 }
グローバル変数とローカル変数 関数には変数のスコープがあり、関数の外側で定義した変数をグローバル変数、関数内で定義された変数をローカル変数と呼びます。ローカル変数は関数が実行されるたびに生成、実行終了後に破棄されます。グローバル変数とローカル変数の名前が重複した場合はローカル変数が優先されます。もし関数内でグローバル変数を操作する場合は、globalキーワードを使用して変数を定義します。
静的変数(static) 関数には関数の実行終了時に破棄されない静的変数(static変数)があります。静的変数はカウンタなど、関数を複数回実行した場合にも関数内で共有したい値を格納する際に使用されます。
値渡しと参照渡し 関数の引数には値で渡す方法と、変数の参照を渡す方法があります。値で渡した場合、元の変数値は変更されません。それに対して参照渡しでは参照元の変数値が変更されます。参照渡しでは引数の変数名の前に&を付与します。
クラス定義 クラスは関連する変数や関数定義を集めたものです。クラスの変数をプロパティ、関数をメソッドと呼びます。クラスはclassキーワードに続けてクラス名を記述し、ブロック({})内に変数や関数を定義します。クラス名は慣例として単語の先頭のみ大文字(キャメル記法)で定義します。構文:class クラス名 { 変数や関数を定義 }
インスタンス化とオブジェクト 定義したクラスをメモリ上に作成する事をインスタンス化と呼び、作成したものをオブジェクトと呼びます。前のステップで作成したCatクラスをインスタンス化するためにはnewキーワードの後にクラス名()を指定します。
プロパティとメソッドの呼び出し オブジェクト内の変数(プロパティ)や関数(メソッド)にアクセスするにはオブジェクト名->プロパティ名あるはオブジェクト名->メソッド名の形式で呼び出します。プロパティ名やメソッド名の前にオブジェクト名->が付くこと以外は通常の変数や関数の操作と同じです。前のステップでインスタンス化した$catオブジェクトのプロパティ値の変更やメソッドの呼び出しをしてみましょう。
アクセス修飾子 クラスのプロパティには意図しない値の変更を防止するためにアクセス修飾子を指定する決まりになっています。アクセス修飾子にはpublicprivateprotectedの3種類があります。publicはオブジェクト外からのアクセスを許可します。privateは同じクラス内からのアクセスのみを許可します。protectedは同じクラスもしくはその派生クラスからのアクセスのみを許可します。前のステップの$nameプロパティのアクセス修飾子をpublicからprivateに変更してどのような結果になるかを確認してみましょう。
カプセル化 前のステップでは外部からの意図しない変更を防止するために$nameプロパティのアクセス修飾子をpublicからprivateに変更しました。では$nameプロパティの値を変更するためにはどうすればいいでしょうか?これは直接プロパティ値を変更できない代わりに、専用のメソッドを作成することで解決できます。プロパティ値を変更するメソッドを一般的にセッター、逆にプロパティ値を取得するメソッドをゲッターと呼びます。このようにオブジェクトに対してセッターとゲッターのみでアクセスできるようにすることをカプセル化といいます。また関数内でインスタンス変数にアクセスするには変数名の前に$this->を付けます。$thisは現在のインスタンスを表します。
クラス変数(static) クラス変数はスコープがクラス全体となりクラス内で共有できる変数です。クラス変数を定義するには変数名の前にstaticを指定します。クラス変数にアクセスするためには必ずしもクラスをインスタンス化する必要はなくクラス名::クラス変数名でアクセスできます。オブジェクト内からクラス変数にアクセスするにはselfキーワードを使用します。
クラス定数(const) 定数とは一度値を代入したら変更できない変数です。一般的に円周率などの不変である値を設定します。定数の定義は変数名の前にconstキーワードを付与します。クラス変数と同様にオブジェクト内からアクセスする場合はselfキーワードを使用します。定数名は慣例としてすべて大文字、単語の区切りはアンダースコア(_)で定義します。
継承とオーバーライド あるクラスを基にクラスを生成することをクラスを継承するといいます。継承元のクラスを基底クラス、継承したクラスのを派生クラスと呼びます。派生クラスを作成するには、派生クラス名の後ろにextendsキーワードを付与し、その後ろに基底クラス名を指定します。また、派生クラス側で基底クラスに存在する変数や関数を定義した場合、基底クラスの変数や関数を上書きすることになり、これをオーバーライドと呼びます。派生クラスから基底クラスのメソッドを呼び出すことは可能ですが、その逆はできません。構文:class 派生クラス名 extends 基底クラス名 { 変数や関数を定義 }
派生クラスから基底クラスのメソッド呼び出し 派生クラス内からは基底クラスのメソッドを呼び出すことが可能です。基底クラスのメソッドを呼び出すにはメソッド名の前にparent::を付与します。逆に基底クラスは派生クラスのことを知らないため基底クラスから派生クラスでオーバーライドされたメソッドを呼び出すことはできません前のステップで定義した派生クラス内に、基底クラスのメソッド呼び出しを追加してみましょう。
インターフェイス インターフェイスはクラスの定数名や関数名と引数の定義のみを行い実装はしない、クラスのプロトタイプ定義です。つまりクラスの雛形(スケルトン)として使用されます。インターフェイスはinterfaceキーワードを使用して定義し、クラスに実装する場合は、クラス名の後にimplementsキーワードを指定し、その後ろにインターフェイス名を記述します。そしてそのクラス内でメソッドの実装を行います。構文:interface インターフェイス名 { 定数や関数名の定義 }
抽象クラスと抽象メソッド 抽象クラスは抽象メソッドを定義したクラスを指します。抽象メソッドはメソッド名と引数のみを定義し実装を行わないメソッド定義です。抽象メソッドを定義するにはfunctionキーワードの前にabstractキーワードを指定します。抽象クラスはインターフェイスと同様にそれ自体をインスタンス化することはできず、クラスに継承し、そのクラスで抽象メソッドをオーバーライドして利用することを前提としています。抽象メソッドを含むクラスは必ず抽象クラスとして定義しなければなりません。インターフェイスと異なる点は、インターフェイスはメソッドの実装は不可であるのに対し、抽象クラスはメソッドの実装も可能な点です。構文:abstract class クラス名 { abstract function 関数名(引数) }
コンストラクタとデストラクタ コンストラクタはクラスがインスタンス化される際に呼び出されるメソッド、デストラクタはクラスのインスタンスが破棄される際に呼び出されるメソッドになります。これらは初期化終了処理を目的としてクラスに実装されている機能です。初期設定では引数無しのデフォルトコンストラクタデフォルトデストラクタが呼ばれます。派生クラスのインスタンス生成時には、基底クラスのコンストラクタは呼ばれません。もし派生クラスの初期化時に基底クラスのコンストラクタを実行させたい場合は明示的に呼ぶ必要があります。コンストラクタはクラス内で__construct()関数で定義します。デストラクタはクラス内で__destruct()関数で定義します。
無名関数(クロージャ) 無名関数はクロージャとも呼ばれ、関数名を定義せずに関数定義を行う事を指します。PHPの内部関数には引数に関数定義を渡せるものがあります。また値の代わりに関数定義を変数に代入することも可能です。変数を無名関数に渡す場合は、useキーワードを使用します。構文:変数名 = function (引数) use (変数) { 実行する処理 };