デフォルトでは、検索対象文字列を(実際には複数行からなる 場合でも)単一の行からなるとして処理する。
しかしこの修飾子をつけることで、 対象文字列の中に "\n" がある場合は、
それぞれの行に対してマッチングを行う
例. サンプル10
string mb_convert_encoding (string $str, string $to [, mixed $from])
PHP Manual:mb_convert_encoding
string mb_convert_variables (string $to, mixed $from, mixed &$vars [, …])
PHP Manual:mb_convert_variables
例. サンプル11
標準的な関数ではカバーされていなが、
アプリケーション開発者が自分で定義した関数
function 関数名 (仮引数、…) { //処理 retrun 戻り値; }
※関数名の記法:CamelCase?記法 ⇒名前の先頭を小文字で始め、単語の区切りを大文字で表す記法
また、ユーザー定義関数は複数のスクリプトで共有することが多いので、
再利用性を高める意味でも、ユーザー定義関数は別ファイルとして保存しておき、
それぞれのスクリプトからは必要に応じて別ファイルに取り込むことがよい。
外部ファイルを取り込むときは、なるべくrequire_onceを使うとよい
指定されたファイルが見つからなかった場合、Fatal Error(致命的なエラー)を出して その場でスクリプトを中断する
指定されたファイルが見つからなかった場合、Warning(警告)を発するだけで処理を続行する
それぞれrequire、includeの「1度きり」版 指定されたファイルがすでに読み込み済みである場合、require_once/include_onceはスクリプトを読みこまず、 処理をスキップする。 そうすることによって、循環呼び出し(呼び出し元と呼び出し先で互いにインクルードしあうこと)を未然に防ぐ。
関数は基本的にスクリプトのどの位置に定義してもかまわない。
これはfunction命令による関数定義が、実行時にではなくコンパイル時に行われているため。
しかし、以下のような場合は注意が必要
例. サンプル1
この場合、関数は条件式を満たした場合のみ定義される。
つまり条件式が評価されるまで関数は定義されないので、この場合関数呼び出しコードは
関数定義のコードの後に記述しなければならない
例. サンプル2
この場合、コンパイル段階では関数は登録されるだけで実行されるわけではない。
つまり関数内関数は実行時に親の関数が呼び出されるまで実行されない。
スコープとは、スクリプトの中での変数の有効範囲のこと。
例外的に関数ブロッの中からグローバル変数を使用する場合には、
global命令を使用する
例. サンプル3
ローカル変数は関数は関数内にのみ適用される変数なので、
関数が呼び出されるたびに初期化される
例. サンプル4
関数の終了後もローカル変数を維持するためには静的変数(static命令)を使用する。
静的変数は、関数の初回呼び出しの時にのみ初期化され、その後関数処理が終了しても維持される。
関数内でghlobal変数が破棄されても、あくまでローカル変数として破棄されるだけで、
関数外部には影響しない.
関数内部でグローバル変数を破棄したい場合には、
unset($GLOBALS['x']);
を使用する
例. サンプル5
静的変数を破棄した場合、その関数での「以降の処理」でのみ変数を破棄する
例. サンプル6
関数名 (引数 = デフォルト値)
function getTriangleArea ($base = 5, $height =1) { return $base * $height / 2: }
引数の前に「&」をつける
例. サンプル7
※参照渡しされた引数を関数の中で破棄(unset)されても、もとの変数には影響しない。
※参照渡しは時としてコードの流れをわかりにくくする原因にもなるので、汎用は禁物。
引数の個数があらかじめ決まっていない関数のこと。
組み込み関数としては、max、minなどが代表例にあたる。
ユーザー定義関数でも、可変長引数の関数を定義することは可能。
関数から複数の値を返したい場合、return命令では、
return 1, 2;
のような複数の値を返すことはできない。
この場合は、配列やオブジェクトにして値を一つにまとめたうえで、
値を返さなければならない。
また、戻り値を配列として受け取ってもよいが、戻り値の含まれる個別の要素を
そのまま変数に振り分けたい場合には、list命令を使う
関数が、関数内で自分自身を呼び出す関数のこと
例. サンプル8
$変数名()の形式で呼び出せる関数。
これによって変数名に応じて対応する関数を検索実行することができる。
この可変関数は、 関数そのものを引数として渡したり、あるいは受け取ったりする高階関数に使用されることが多い。
例. サンプル9
その場限りでしか利用しない、使い捨ての関数に使用。
function (引数) { // 任意の処理 return 戻り値; }
プログラムで扱う対象をオブジェクトに見立てて、
オブジェクトを中心にコードを組み立てていく手法のことをオブジェクト指向プログラミングという。
PHPでもオブジェクト指向プログラミングに対応した
オブジェクト指向型ライブラリ(クラスライブラリ)も多く提供されるようになっている。
関数は、与えられた引数に対して処理結果を戻り値として出力する仕組み。
これに対してクラスから作られるオブジェクトは、自分自身でデータを持つことが出来る。
処理前、処理後のデータを保存しておき、必要に応じて別途利用できる。
クラス/オブジェクトと関数、変数は以下のように比較できる。
データを保持できる | データを処理できる | |
変数 | ○ | × |
関数 | × | ○ |
クラス/オブジェクト | ○ | ○ |
※クラスはデータが保持できるが、異なる値を代入していくと、
1つのクラスで保持しなければいけないデータがいくつもでてきて矛盾が起きる。
そこで、クラスを使う際には、クラス自体には手を加えず、
それをコピー(インスタンス化)したものに対して操作していく。
クラスを基にしてコピーを作ることをインスタンス化、
インスタンス化によってできるものをインスタンス(オブジェクト)という。
クラスのインスタンス化(new 演算子)
$ オブジェクト変数名 = new クラス名 ([引数…])
クラスに属する関数と変数のことをそれぞれメンバ関数、メンバ変数、
またはメソッド、プロパティと呼ぶ。
プロパティ/メソッドの呼び出し
[戻り値 =] オブジェクト変数->メソッド名([引数…]) オブジェクト変数->プロパティ [= 値]
例外的にオブジェクトを生成せずに呼びだせるメソッドやプロパティ
[戻り値 =] クラス名::メソッド名([引数…]) クラス名::プロパティ [= 値]
※呼び出しもとがオブジェクト変数ではなく、クラスであることに注意!!
日付/時刻の演算や整形を行うためのクラス。
関数型のライブラリとして、ほとんど同等の機能を持つ日付/時刻関数もある。
PHP5.2以降で使用可能。
DateTime?クラスのインスタンス化
$ オブジェクト変数名 = new DateTime();
また、PHP5.3以降はいくつかの新しいメッソドを追加している
指定されたディレクトリ配下のファイル情報にアクセスするためのクラス。
$ オブジェクト変数名 = new Directorylterator(string $file_path);
PHPには標準で利用可能なライブラリのほかに、さまざまな拡張ライブラリが用意されている。
PEAR(PHP Extension and Application Repository)はそのうちのひとつ。
PHPスクリプトで書かれたクラスライブラリの1つで、以下のような特徴がある。
※PEARの利点はインストールした時点で、多くの関数が作成されていること。
これによって、容易に・スピーディーに開発が可能になる。
PEARを利用するには、パッケージ管理とインストールを支援するパッケージマネージャ(pearコマンド)が必要。
Linux環境では、デフォルトでパッケージマネージャを利用可能。
Windows環境では、PHP本体とは別にパッケージマネージャをインストールする必要あり。
パッケージマネージャが利用可能になったら、個々のパッケージをインストールする。
アプリケーションに対して、簡単に「フォーム認証」機能の実装が可能。
その名の通り、フォームを手軽に構築するための機能。
大量のデータをページング機能で分割。
PHPアプリケーションから動的にExcel形式のファイルを生成するためのライブラリ。
その他、たくさん。
参考資料