はじめに
個人的なメモ。
変数展開
${変数名}
のようにして変数を使う方法だと思っている。
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の投稿で@をエスケープする
バーティカルバー