エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

PHPの$a=$bが、$aをreturnしているのを調べよう【97日目】

導入のきっかけ

willow710kut.hatenablog.com

なので、=が関数なら、何をreturnしてるか調べようってお話

書いたプログラム

$a = 0;
var_dump($a);
var_dump($b);
var_dump($a = $b);
var_dump($a);
var_dump($b);
var_dump($a = $a);
var_dump($a = $b = $c);

実行結果

php -a使って確認。php7.0です。

見にくいので改行入れました。

php > $a = 0;

php > var_dump($a);
int(0)

php > var_dump($a = $b);
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1
NULL

php > var_dump($a);
NULL

php > var_dump($b);
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1
NULL

php > $a = $b;
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1

php > var_dump($a = $a);
NULL

php > var_dump($a = $b = $c);
PHP Notice:  Undefined variable: c in php shell code on line 1
Notice: Undefined variable: c in php shell code on line 1
NULL

それぞれの原因を予想しよう

代入。

php > $a = 0;

php > var_dump($a);
int(0)

$aに代入。echoしてないので返り値は見れないです。
ということで、これは標準出力に吐き出しているわけではない模様。

var_dumpは引数の型や値を出力してくれる便利関数。今の$aはint型で0みたいですね。

=の出力

php > var_dump($a = $b);
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1
NULL

php > var_dump($a);
NULL

php > var_dump($b);
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1
NULL

var_dump($a = $b)var_dump($a)var_dump($b)を比較すると、

var_dump($a = $b)のまえに$bを読み込んで
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1
を出し、その後、
$aを出力した

と予測されますが・・・その前に、$a = $bで$bがエラーを吐かずに$bだけ出力した可能性が残されてます。

代入単体でテスト

php > $a = $b;
PHP Notice:  Undefined variable: b in php shell code on line 1
Notice: Undefined variable: b in php shell code on line 1

php > var_dump($a = $a);
NULL

あ、$a = $bでエラー出してますね。これは仮定が正しそう。
そして、var_dump($a = $a)すると、$a = $aがちゃんと値をreturnしてるっぽいですね。

3つ繋いだ場合は?

php > var_dump($a = $b = $c);
PHP Notice:  Undefined variable: c in php shell code on line 1
Notice: Undefined variable: c in php shell code on line 1
NULL
  1. $c→エラー
  2. $bにNULL代入、$bを出力
  3. 出力された$b(NULL)を$aに代入
  4. $aを出力→NULL

って感じで私は$a = $b$aを出力したと予想しました!

結論:何事も試してみる大切。

頭で考えていただけだと、$aと$bのどちらを出力するのかわからなかったので、
コードを書いて試してみるとか、ドキュメント読むとか、元のソースコードを追うとか大切。

日記

100日目まであと3日!

100日目に書く記事何も考えてない!!!

とりあえず、少しずつ勉強する生活が安定してきました!

ブラックの会社の人より、自由時間使って勉強しないと置いていかれるって聞いて、
なるほどって思ったし、実際周りの友人残業やばい人いくらでも思い浮かぶし、
頑張って勉強して自分の成長に投資しないといけないですね。

頑張れ私ー!

今日の作業時間

30分+これからもう少しやります

今日の運動

エアロバイク1.5km+これからもう少しやります