何かしらの入力値(引数)を与えることによって、
あらかじめ決められた処理を行い、その結果(戻り値)を返す仕組み。
戻り値 = 関数名(引数, …)
PHPが標準で提供する関数のことを
組み込み関数・ビルドイン関数・内部関数などという。
関数には以下のような種類がある
※関数の構文の見方
戻り値の型 関数名 ( 引数, …)
マルチバイト文字列関数の設定
int strlen (string $str) 与えられた文字列 $str のバイト数を返す
int mb_strlen (string $str [, string $enc]) 与えられた文字列 $str の文字数を返す $encは使用するエンコーディング名 省略時にはphp.iniのmbstring.internal_encodingパラメータ(内部文字エンコーディング)を使用
string strtolower (string $str) 与えられた文字列 $str を全て小文字から大文字に変換
string strtoupper (string $str) 与えられた文字列 $str を全て大文字から小文字に変換
string ucfirst (string $str) 与えられた文字列 $str の先頭がアルファベットであれば、その文字だけを大文字に変換
string lcfirst (string $str) 与えられた文字列 $str の先頭がアルファベットであれば、その先頭の文字だけを小文字に変換
string ucwords (string $str) 与えられた文字列 $str の単語の区切りを全て大文字に変換
string mb_strtolower (string $str [, string $enc]) 与えられたマルチバイト文字列 $str を全て小文字から大文字に変換 $enc には使用する文字エンコーディングを指定する
string mb_strtoupper (string $str [, string $enc]) 与えられたマルチバイト文字列 $str を全て大文字から小文字に変換 $enc には使用する文字エンコーディングを指定する
string substr (string $str, int $start [, int $len]) 与えられた文字列 $str から部分的な文字列を取り出す $start の位置(先頭の文字は「0」)から $len の数だけ文字を取り出す $start で指定した位置から文字列の末尾まで取り出す $start、$len に負の数を指定した場合は文字列の末尾からの文字数を表し、末尾は「-1」として数える
string mb_substr (string $str, int $start [, int $len [, string $enc]]) 与えられたマルチバイト文字列 $str から部分的な文字列を取り出す $enc には使用する文字エンコーディングを指定する
mixed str_replace (mixed $src, mixed $rep, mixed $str [, int $cnt]) $str の中の $src を全て $rep に変換する $cnt には $str の中の置き換えられた箇所の個数を格納する また、$str、$src、$rep には、それぞれ配列を渡すことも可能
例.
サンプル1
array explode (string $deli, string $str [, int $limit]) $str を $deli で区切った配列を返す $limit に正の数が指定された場合、最大 $limit の要素が含まれ、その最後の要素には $str の残りの部分が全て含まれる また、$limit に負の数が指定された場合、最後の -$limit 個の要素を除く全ての構成要素が返される なお、「$limit = 0」の場合は、「$limit = 1」と同値とみなされる
例.
サンプル2
int strpos (string $str, mixed $needle [, int $offset = 0]) $str の中で、$needle が最初に現れた位置を数字で返す また $offset により、検索を開始する $str の文字を指定することが可能 この場合でも、返される位置は $str の先頭からの相対位置となりる さらに、$needle が文字列でない場合は、それを整数に変換し、その番号に対応する文字として扱う $needle が見つからない場合、「FALSE」を返す
例.
サンプル3
int strrpos (string $str, mixed $needle [, int $offset = 0]) $str の中で、$needle が最後に現れた位置を数字で返す この場合、$needle は単一文字でなければならない 仮に $needle に文字列が指定された場合、その文字列の最初の文字だけが使われる $needle が見つからない場合、「FALSE」を返す
int mb_strpos (string $str, mixed $needle [, int $offset = 0 [, string $enc]]) マルチバイト文字列に正しくマッチするように、strpos関数を拡張したもの $enc には使用する文字エンコーディングを指定する
int mb_strrpos (string $str, mixed $needle [, int $offset = 0 [, string $enc]]) マルチバイト文字列に正しくマッチするように、strrpos関数を拡張したもの $enc には使用する文字エンコーディングを指定する
string sprintf (string $format [, mixed $args [, …]]) $args で与えられた文字列を、$format で指定された文字列にして出力 $froma tの部分以外は、そのまま
int printf (string $format [, mixed $args [, …]]) $args で与えられた文字列を、$format で指定された文字列にして、その長さを出力
例.
サンプル4
string mb_convert_kana (string $str [, string $option [, string $enc]]) $str で与えられたマルチバイト文字をひらがなからカタカナ、全角文字から半角文字に変換可能 エンドユーザーから入力した値に「ゆらぎ」があったとしても、この関数を使えば表記をそろえることができる
string mb_convert_encoding (string $str, string $to [, mixed $from]) $strの文字エンコーディングを、$from から $to に変換 $from には変換前の文字エンコーディング名を指定できるが、これは配列またはカンマ区切りの文字列とすることが可能 $from を指定しなかった場合は、内部エンコーディングを使用 なお、$from に「auto」と指定すると「ASCII,JIS,UTF-8,EUC-JP,SJIS」と展開される
PHP Manual:mb_convert_encoding
string mb_convert_variables (string $to, mixed $from, mixed &$vars [, …]) エンコーディング $from の変数 $vars を $to に変換 成功時に変換後の文字エンコーディングを返し、失敗した場合には「FALSE」を返す $from は省略できないので、内部エンコーディングを使用する場合には、 $from = mb_internal_encoding(); などとして、内部エンコーディングを明らかにしておく必要がある
PHP Manual:mb_convert_variables
bool mb_send_mail (string $to, string $subject, string $msg [, string $headers = null [, string $param = null]])
int count (array $var [, int $mode = COUNT_NORMAL]) $var に含まれるすべての要素またはプロパティの数を数える
デフォルトでは、入れ子になった配列の要素は無視して、1次元目の要素だけで数える
しかし、引数の $mode をCOUNT_RECURSIVEにすると、2次元目以降に相当する要素もカウントし、
その合計数を返す
例.
サンプル5
array array_merge (array $array1 [, array $array2 [, …]]) 前の配列の後ろに配列を追加することにより、ひとつまたは複数の配列の要素をマージし、得られた配列を返す
以前紹介した「+」演算子とは以下のような箇所が違う
例.
サンプル6
string implode (string $glue, array $pieces) 配列の各要素を $glue で連結した結果を返す デフォルトでは、$glue は空文字列
int array_push (array &$array, mixed $var [, mixed $var …]) $var で与えられた要素を $arrayの末尾に追加 戻り値としては、追加後の要素数を返す
※ただし、単一の要素を追加するだけならば、array_push関数よりもブラケット構文の方が、
関数を呼び出すオーバーヘッドがない分よい。
ブラケット構文:配列[] = 追加要素
mixed array_pop (array &$array) $array の末尾の要素を1つ除去し、除去した後の配列を戻り値として返す
int array_unshift (array &$array, mixed $var [, mixed $…]) $var で与えられた要素を $arrayの先頭に追加 戻り値としては、追加後の要素数を返す
int array_shift (array &$array) $array の先頭の要素を1つ除去し、除去した後の配列を戻り値として返す
※なお、これらを利用して、以下のようなことが表現できる
・array_push関数(or ブランケット構文)+array_pop関数→スタック
・array_push関数(or ブランケット構文)+array_shift関数→キュー
array array_splice (array &$input, int $off [, int $len [, mixed $rep]]) $input で与えられた配列の $off の位置から $len 個の要素を削除し、$rep を挿入する 「$len = 0」のとき、削除する要素がないので、挿入となる
array array_slice (array $array, int $off [, int $len [, bool $preserve = FALSE]] ) $array で与えられた配列の $off の位置から $len 個の要素を取り出す。 $len を省略すると、末尾まで取得する 「$preserve = TRUE」とすると、もともとのインデックス番号が引き継がれる
例.
サンプル7
bool sort (array &$array [, int $flags = SORT_REGULAR]) 配列を値の低位から高位へと並べる
※配列を並び替える関数はいくつか種類があるので、それぞれの特徴を表にして見比べてみる
関数名 | 順序 | ソートキー | 主な対象 | キーの維持 |
sort | 昇順 | 値 | 通常配列 | × |
rsort | 降順 | 値 | 通常配列 | × |
asort | 昇順 | 値 | 連想配列 | ○ |
arsort | 降順 | 値 | 連想配列 | ○ |
ksort | 昇順 | キー | 連想配列 | ○ |
krsort | 降順 | キー | 連想配列 | ○ |
例.
サンプル8
正規表現とは、「あいまいな文字列パターンを表現するための記法」です
正規表現を利用するためには
「通常の文字とメタキャラクターを組合せて特定の文字列とマッチするパターン」を
作れなければならない
/正規表現のパターン/[パターン修飾子]
int preg_match (string $pattern, string $subject [, array &$matches [, int $flags [, int $offset]]) $pattern で指定した正規表現により $subject を検索する $matches を指定した場合、$matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] にはにマッチした文字列が代入される
int preg_match_all (string $pattern, string $subject, array &$matches [, int $flags [, int $offset]]) $subject を検索し、$pattern に指定した正規表現にマッチしたすべての文字列を、 $flags で指定した順番で、$matches に代入する 正規表現にマッチすると、そのマッチした文字列の後から検索が続行される
mixed preg_replace (mixed $pattern, mixed $rep, mixed $subject [, int $limit = -1 [, int &$count]]) $subject に関して $pattern の検索を行い、$rep に置換する 引数には、文字列だけではなく、配列も指定可能 また、$limit には置換を行う最大回数を指定できる デフォルトは -1 (制限無し)
array preg_split (string $pattern, string $subject [, int $limit = -1 [, int $flags = 0]]) $pattern で指定した文字列で、$subject を分割する
構文そのものは、explode関数とほぼ同じ。
ただし、正規表現を使った処理ははオーバーヘッドが大きい。
単純に固定の文字列で分割するだけならば、explode関数を優先して使うべき。
ファイルシステム上のフォルダ(ディレクトリ)やファイルを操作するための関数
ただし、操作するユーザーが予めファイルへの書き込み権限を持っているように設定しておかなければならない
resource fopen (string $file, string $mode) $file でオープンするファイルを指定して、$mode で、ファイルを開く際のモードを指定する
bool fclose (resource $handle) $handle が指しているファイルをクローズする クローズが成功したか、失敗したかの値を返す
void die ([string $status]) exiteと同等
しかし、@fopen(〜〜) or die("ファイルオープンに失敗!")という構文でよく使われる
これは、or演算子によるショーカット構文を使用しているため、orの左辺である $fopen でエラーが発生しなければ、無視される。
int fwrite (resource $handle, string $str [, int $len]) $handle が指しているファイルに $str、もしくは $len で指定したバイト数分書き込む なお、fwrite のエイリアスは fputs
名前だけが異なる、まったく同じ機能をもった関数のこと
bool flock (resource $handle, int $ope) $handle で指定されたファイルをロックする
string fgets (resource $handle [, int $len]) $handle で指定されたファイルポインタから1行取得する
array file (string $filename [, int $flags = 0 [, resource $context]]) $filename を「配列」に読み込みこむ
string file_get_contents (string $filename [, int $flags = 0 [, resource $context [, int $offset = -1 [, int $maxlen = -1]]]]) file関数と似ているが、$offset で指定した場所から開始し、$maxlen バイト分だけファイルの内容を「文字列」に読み込むと
array fgetcsv (resource $handle [, int $len [, string $deli [, string $enclosure [, string $escape]]]])'' fgets関数に動作は似ているが、fgercsv関数は行をCSVフォーマットのフィールドとして読込み処理を行い、読み込んだフィールドを含む配列を返す
void unset (mixed $var [, mixed $var [, …]]) $var を破棄する 破棄された変数は存在しないことになるので、NULLになる なお、グローバル変数に関数の中で unset関数を使用した場合、ローカル変数のみが破棄され 呼出側の環境にある変数は、unset関数がコールされる前と同じ値を保持する
PHPはデータ型に寛容な言語だが、完全に無視することはできない
特に値の演算や比較では型を意識することがある
そこで、以下のような「is_〜」という関数を使って、変数/リテラルのデータ型を判別し、
その結果をTRUE/FALSEで得る
関数 | 判定する型 |
is_array | 配列型 |
is_bool | 論理型 |
is_double/is_float/is_real | 浮動小数点 |
is_int/is_integer/is_long | 整数型 |
is_null | NULL型 |
is_numeric | 数値型or数値形式の文字列 |
is_object | オブジェクト型 |
is_resource | リソース型 |
is_scalar | スカラー型 |
is_string | 文字列型 |
参考資料