Slide 1

Slide 1 text

マジカルインクリメントと 指数表記 PHP勉強会in広島 vol.2 LTDD 2024-12 #1 @tsuda_ahr

Slide 2

Slide 2 text

PHP には • マジカルインクリメントという機能があるらしい

Slide 3

Slide 3 text

マジカルインクリメントとは • 文字列に対してインクリメント演算子を適用すること。

Slide 4

Slide 4 text

試してみる

Slide 5

Slide 5 text

結果 https://onlinephp.io/

Slide 6

Slide 6 text

便利! • ですよね?

Slide 7

Slide 7 text

よしもっとインクリメントしよう!

Slide 8

Slide 8 text

結果

Slide 9

Slide 9 text

何が起こった? • わかるひと?

Slide 10

Slide 10 text

結果をさかのぼってみる

Slide 11

Slide 11 text

なぜ? • 2024E0 の次が 2024E1 (=期待値) ではなく、2025 なのか?

Slide 12

Slide 12 text

指数表記 • 数値リテラル(定数)は、 2024×100 (10の0乗) という表記を 2024E0 と書くことができる。

Slide 13

Slide 13 text

つまり • 2024E0 は 2024×100 = 2024×1 = 2024 となる。 • 2024 をインクリメントすると、2025 になる。

Slide 14

Slide 14 text

気を付けよう。 • マジカルインクリメントを使用する場合は、うっかり数値で評価されてしまう 文字列にならないことを検証しておこう。 • そもそもマジカルインクリメントは使わないほうがトラブルがなくて良いか も?

Slide 15

Slide 15 text

ちなみに • PHP5 までは、16進も数値評価していました。 (PHP7から評価しないように変更)

Slide 16

Slide 16 text

試してみる

Slide 17

Slide 17 text

PHP5 ではこうなる

Slide 18

Slide 18 text

PHP7 ではこう。

Slide 19

Slide 19 text

こちらからは以上です。 • ご利用は計画的に(ぇ

Slide 20

Slide 20 text

と、いいたいところですが・・・ • マジカルインクリメントは PHP 8.3 から非推奨らしいです。 https://www.php.net/manual/ja/migration83.deprecated.php

Slide 21

Slide 21 text

ということで、str_increment を使いましょう。

Slide 22

Slide 22 text

指数として評価されません。

Slide 23

Slide 23 text

Any Question? • 間違いとかあればご指摘ください。