LoginSignup
1
2

More than 3 years have passed since last update.

php文法メモ

Last updated at Posted at 2019-11-18

はじめに

個人的なメモ。

変数展開

${変数名}のようにして変数を使う方法だと思っている。

php
<?php
    for ($i = 0; $i < 5; $i++) {
        ${"num" . $i} = $i;
    }

    echo $num0 . "\n";
    echo $num1 . "\n";
    echo $num2 . "\n";
    echo $num3 . "\n";
    echo $num4 . "\n";

?>
結果
0
1
2
3
4

変数名の一部を変数を使って表せる、ということを表現したかった。

どこで使うかはわからないけど画期的に感じたのでメモ。

参照渡し

phpだとリファレンス渡し?
C言語の感覚とは違っていたのでまとめる。

php
<?php
    function double($n){
        $n *= 2;
    }

    $a = 10;
    double($a);

    echo $a;
?>
結果
10

これは感覚通り。

php
<?php
    function double(&$n){
        $n *= 2;
    }

    $a = 10;
    double($a);

    echo $a;
?>
結果
20

これもまあまあ感覚通り。&をつける位置が感覚と違う。

次が感覚と違う。

php
<?php
    function double($n){
        for ($i = 0; $i < 3; $i++) {
            $n[$i] *= 2;
        }
    }

    $a = [1, 2, 3];
    double($a);

    var_dump($a);
?>
結果
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

配列は参照渡しだと思っていたが、違うらしい。

for文ではなくforeach文を使うと複雑になる。

なんでこのようになるのかは↓を読ませて頂き、とても納得できた。
【PHP超入門】値の代入と値渡しについて
【PHP超入門】参照(リファレンス)の代入について

偶奇判断

なんだこれってなったからメモ

通常
if ($a%2 == 1) {
    echo "奇数";
}
なんだこれ
if ($a & 1) {
    echo "奇数";
}

phpでのビット演算子経験が薄かったのでパッと見で分からなかった。

md練習がてらマニュアル丸コピ
https://www.php.net/manual/ja/language.operators.bitwise.php

名前 結果
\$a & \$b 論理積 \$a および \$b の両方にセットされているビットがセットされます
\$a | \$b 論理和 \$a または \$b のどちらかにセットされているビットがセットされます
\$a ^ \$b 排他的論理和 \$a または \$b のどちらか一方にセットされており、両方にセットされていないビットがセットされます
~ \$a 否定 \$a にセットされているビットはセットせず、そうでないものは逆にします
\$a << \$b 左シフト \$a のビットを左に \$b ビットシフトする (各シフトは "2をかける" ことを意味します)
\$a >> \$b 右シフト \$a のビットを右に \$b ビットシフトします (各シフトは "2で割る" ことを意味します)

論理和の|、この記号を表内に表すのに苦戦した。
参考
Qiitaの投稿で@をエスケープする
バーティカルバー

おわり

1
2
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
1
2