LoginSignup
2
8

More than 5 years have passed since last update.

(他言語経験者)&&(PHP初心者)による個人的覚えておきたいところメモ

Last updated at Posted at 2018-04-22

変数関連

可変変数

可変変数 = 変数名を[変数]によって決めることができる変数

動的にクラスや関数の呼び出しを変更できる


$x = 'title';
$title = 'PHP:HyperTextPreProfessor';

print $$x;
// => PHP:HyperTextPreProfessor

bool

以下のものは論理リテラルを必要とする状況ではFalseになる

  • 空文字列
  • 文字列の0(ゼロ)
  • 浮動小数点リテラルの0.0
  • 要素数が0の配列(空の配列)
  • null(未定義値)

これら以外はすべてTrueとなる

演算子関連

マジカルインクリメント

文字列に対してインクリメント出来てしまうという、個人的にちょっと気持ちの悪い機能


$str = 'Z';

print ++$str;
// => AA
print ++$str;
// => AB

$str = 'D8';

print ++$str;
// => D9
print ++$str;
// => E0

配列の結合


$assoc1 = [
  'Apple' => 'Red',
  'Orange' => 'Yellow',
  'Melon' => 'Green'
];

$assoc2 = [
  'Grape' => 'Purple',
  'Apple' => 'Green',
  'Strawberry' => 'Red'
];

$result = $assoc1 + $assoc2;
print_r($result);

$ary1 = [1, 2, 3];
$ary2 = [4, 5, 6];

$result = $ary1 + $ary2;
print_r($result);

Array(
  ['Apple'] => Red
  ['Orange'] => Yellow
  ['Melon'] => Green
  ['Grape'] => Purple
  ['Strawberry'] => Red
  )

Array(
  [0] => 1
  [1] => 2
  [2] => 3
  )

左の配列に存在しないキーの要素を右の配列から取り出し、左の配列に追加する。

右の配列に左の配列と同じキーがあった場合、その値は無視される。

array_merge()を使うと上書きになる

厳密な等価演算子'==='

PHPの等価演算子(==)は、データ型が異なる場合でもなんとかして等しくしようと評価する

'13xyz'==13Trueになったり。

それを厳密に評価したいときに===を用いる。
そもそもデータ型が一致しないとTrueにならない。

配列を比較する基準

配列同士にも'==', '>='などが利用でき、比較は以下の順序で行われる。

  1. 要素数
  2. 同じキーを持つ要素同士の値の大小(要素が見つかった時点で判定終了)
  3. どちらも等しい場合、等価と判断される

左辺の配列が持つキーを右辺が持っていない場合、比較は失敗する

実行演算子

バッククォート(`)で囲んだブロックをシェルコマンドとして実行。
色々と悪さができそうなので要注意。

$result = `ls`; // windows機は `dir`
print mb_convert_encording($result, 'UTF-8', 'SJIS');

エラー制御演算子 (p.102)

@print 1/0;

文の先頭にエラー演算子(\@)をつけることで、警告メッセージが表示されなくなる 悪魔の演算子
既知のエラーを避けてテストしたいときに使う?

カンマ演算子

for($i=1, $j=1; $result = $i*$j, $i < 6; &i++, &j++){
  print "{$i}*{$j}={$result}<br/>";
}

複数の式を記述できるので、よりコンパクトにコードが書ける。

制御構文

foreach

foreach(配列 as 変数){
  // 処理
}

foreach(連想配列 as キー変数 => 変数){
  // 処理
}

配列の要素が順番に変数に代入される

連想配列の場合、キー変数を指定することでキーの値も取得できる

基本的にPHPでは値渡しされるので、参照渡しがしたい場合は以下のようにする

参照渡しをすることで、ループ中に元々の配列の中身を変更することができる

foreach(連想配列 as &変数){
  // 処理
}

goto

スクリプトの処理を強制的に他に移動できる

goto ラベル名
// 処理

ラベル名 :

しかし、以下の制限がある

  • 異なるファイルには移動できない
  • 関数やクラス/メソッドの中には移動できない
  • ループの外からループ(switch含む)の内部には移動できない

組み込み関数

文字列関数

文字列系の関数は基本的にmb_で始まる(Multi Byteの略?)

長さを取得 int mb_strlen(string $str [, string $enc])

  • $str : 文字列
  • $enc : 使用する文字エンコーディング

大文字/小文字の変換 string strtolower(string $str) / string strtoupper(string $str)

英字は1byte文字なのでmbではない

部分文字列 string mb_substr(string $str, int $start [, int $len, [, string $enc]])

  • $str : 元の文字列
  • $start : 取得開始位置(0スタート)
  • $len : 取り出す文字数
  • $enc : 使用する文字エンコーディング

部分文字列の置換 mixed str_replace(mixed $src, mixed $rep, mixed $str [, int &$cnt])

  • $src : 置き換えたい文字列
  • $rep : 置き換え後の文字列
  • $str : 変更する文字列全体
  • $cnt : 置き換えた文字列の個数を格納する変数
  $str = 'あかぱじゃまあおぱじゃまきぱじゃま';
  print str_replace('ぱじゃま', 'パジャマ', $str, $cnt)."\n";
  print "{$cnt}個の置き換えをしました";

  => あかパジャマあおパジャマきパジャマ
  => 3個の置き換えをしました

\$stc, \$repには配列を渡すことも可能

それぞれのindexに対応した置換が行われる

文字列を区切り文字で分割 array explode(string $delimiter, string $str [, int $limit])

  • $delimiter : 区切り文字
  • $str : 分割したい文字列
  • $limit : 分割の最大数(デフォルトは制限なし)

区切り文字は返り値には含まれない

  $str = "りんごとみかんとぶどう";
  $fruits = explode('と', $str);

  =>  fruits = ['りんご', 'みかん', 'ぶどう']

文字列の変換 string mb_convert_kana(string $str [, string $option = "KV" [, string $enc]])

  • $str : 変換したい文字列
  • $option : 変換オプション(p.158参照)
  • $enc : 使用する文字エンコーディング

マルチバイト文字列をひらがなからカタカナ、全角を半角に変換したりできる。

文字エンコーディング変換 string mb_convert_encoding(string $str, string $to [, mixed $from])

  • $str : 任意の文字列
  • $to : 変換後の文字コード
  • $from : 変換前の文字コード(デフォはmb_internal_encodingの値)

電子メールを送信する bool mb_send_mail(string $to, string $subject, string $msg[, string $headers [, string $param]])

  • $to : 宛先
  • $subject : 件名
  • $msg : 本文
  • $headers : メールヘッダ(Cc, Fromなど。「ヘッダ名 : 値」で改行区切り)
  • $param : その他、メールシステムに渡すパラメータ情報

配列関数

要素数取得 int count(array $var [, int $mode = COUNT_NORMAL])

  • $var : 対象の配列
  • $mode : カウントの方法

$mode = COUNT_RECURSIVEにすると、入れ子の要素も含めたカウントが行われる。

配列の連結 array array_merge(array $array1 [, array $array2 [, ...]])

  • $array1, 2, ... : 連結する配列

+演算子と異なり、キーが重複している場合には 「後者」 が優先される

また、index 番号 が重複している場合には新たに番号が振られ、上書きされない


$assoc1 = [
  'Apple' => 'Red',
  'Orange' => 'Yellow',
  'Melon' => 'Green'
];

$assoc2 = [
  'Grape' => 'Purple',
  'Apple' => 'Green',
  'Strawberry' => 'Red'
];

$result = array_merge($assoc1, $assoc2);
print_r($result);

$ary1 = [1, 3, 5];
$ary2 = [2, 3, 6];

$result = array_merge($ary1, $ary2);
print_r($result);
Array(
  [Apple] => Green
  [Orange] => Yellow
  [Melon] => Green
  [Grape] => Purple
  [Strawberry] => Red
  )

Array(
  [0] => 1
  [1] => 3
  [2] => 5
  [3] => 2
  [4] => 3
  [5] => 6
  )

各要素を結合してString化 string implode(string $glue, array $pieces)

  • $glue : 連結に使用する文字列
  • $pieces : 連結する配列

$data = ['PHP', 'Perl', 'Ruby', 'Python'];
print implode(',', $data);

// => PHP,Perl,Ruby,Python

配列操作(追加、削除) array_push, array_pop, array_shift, array_unshift

  • $array : 操作したい配列
  • $var : 追加したい文字列 ### 末尾 #### 追加 int array_push(array &$array, mixed $var [, $mixed $...])
    #### 削除 mixed array_pop(array &$array)
    ### 先頭 #### 追加 int array_unshift(array &$array, mixed $var [, $mixed $...])
    #### 削除 mixed array_shift(array &$array)

複数要素を追加/置換/削除 array array_splice(array &$input, int $off [, int $len, mixed $rep])

  • &$input : 操作対象の配列
  • $off : 抽出開始位置
  • $len : 取り出す要素数
  • $rep : 削除箇所に挿入する配列

配列方特定範囲の要素を取得 array array_slice(array $array, int $off [, int $len [, bool $preserve = false]])

  • $array : 任意の配列
  • $off : 抽出開始位置
  • $len : 取り出す要素数
  • $preserve : 取得した要素のキーを維持するか

参考図書

独習PHP第3版

2
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8