1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

phpで、$a~$zの変数についてワンライナーで定義する

Last updated at Posted at 2020-03-28

はじめに

このコードはネタコードです。
$a ~ $zの変数について、ワンライナーで定義したいと思います。格納する値は5です。

ワンライナー

$a = ( $b = ( $c = ( $d = ( $e = ( $f = ( $g = ( $h = ( $i = ( $j  = ( $k = ( $l = ( $m = ( $n = ( $o = ( $p = ( $q = ( $r = ( $s = ( $t = ( $u =  ( $v = ( $w = ( $x = ( $y = ( $z = 5 )))))))))))))))))))))))));

出力すると

$ php -a
Interactive shell

php > $a = ( $b = ( $c = ( $d = ( $e = ( $f = ( $g = ( $h = ( $i = ( $j  = ( $k = ( $l = ( $m = ( $n = ( $o = ( $p = ( $q = ( $r = ( $s = ( $t = ( $u =  ( $v = ( $w = ( $x = ( $y = ( $z = 5 )))))))))))))))))))))))));

何も出力されず終わります。

get_defined_vars()で中身を確認

$a ~ $zがちゃんと定義されているか、その中身をget_defined_vars()の出力で確認してみましょう。

php > $a = ( $b = ( $c = ( $d = ( $e = ( $f = ( $g = ( $h = ( $i = ( $j = ( $k = ( $l = ( $m = ( $n = ( $o = ( $p = ( $q = ( $r = ( $s = ( $t = ( $u =  ( $v = ( $w = ( $x = ( $y = ( $z = 5 )))))))))))))))))))))))));
php > var_dump(get_defined_vars());
array(33) {
  ["_GET"]=>
  array(0) {
  }
...
  ["a"]=>
  int(5)
  ["b"]=>
  int(5)
  ["c"]=>
  int(5)
  ["d"]=>
  int(5)
  ["e"]=>
  int(5)
  ["f"]=>
  int(5)
  ["g"]=>
  int(5)
  ["h"]=>
  int(5)
  ["i"]=>
  int(5)
  ["j"]=>
  int(5)
  ["k"]=>
  int(5)
  ["l"]=>
  int(5)
  ["m"]=>
  int(5)
  ["n"]=>
  int(5)
  ["o"]=>
  int(5)
  ["p"]=>
  int(5)
  ["q"]=>
  int(5)
  ["r"]=>
  int(5)
  ["s"]=>
  int(5)
  ["t"]=>
  int(5)
  ["u"]=>
  int(5)
  ["v"]=>
  int(5)
  ["w"]=>
  int(5)
  ["x"]=>
  int(5)
  ["y"]=>
  int(5)
  ["z"]=>
  int(5)
}

きちんと定義できていることが確認できました。

説明

phpの式について調べていたら、こんな記述を見つけました。

代入式は、それ自体、代入値を評価します。 この場合、その値は 5 になります。 このことは、実際には、$a = 5 は、それが何をするかによらず、 値 5 を有する式であることを意味します。 つまり、 $b = ($a = 5) のように書くことは、 $a = 5; $b = 5; と書くのと 同様なのです。
ref: https://www.php.net/manual/ja/language.expressions.php

phpにおける式の定義は、"値のあるもの全て"です。
代入式もこの定義に漏れず値を持っています。$a = 5;の代入式それ自体が持つ値は5であり、$b = ( $a = 5 );と記載した場合、それはすなわち$a = 5; $b = 5;と同意となります。

ということで、それを$a ~ $zまで入れ子にして繰り返したのが、本ワンライナーでした。

追記

この長い式も、値を持っています。
再帰的に処理され、最終的には$a = 5という式になります。

php > echo $a = ( $b = ( $c = ( $d = ( $e = ( $f = ( $g = ( $h = ( $i = ( $j  = ( $k = ( $l = ( $m = ( $n = ( $o = ( $p = ( $q = ( $r = ( $s = ( $t = ( $u =  ( $v = ( $w = ( $x = ( $y = ( $z = 5 )))))))))))))))))))))))));
5

"echo"で式自体の値を吐き出させると、5が出力されます。

おわりに

本ワンライナーは思いつきで書いたネタコードです。
プロダクトのコードではこんなことはせずに配列を使いましょう。

追記

よければコメント欄もご覧ください。

1
0
5

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?