Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マジカルインクリメントと指数表記
Search
tsuda.a
December 08, 2024
Programming
0
180
マジカルインクリメントと指数表記
PHP の特徴的な機能の一つである文字列へのインクリメントに関する注意喚起と、指数表記という普段あまり目にしないリテラル表記についての紹介です。
tsuda.a
December 08, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
バックアップしていますか?
tsudaahr
0
110
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
120
NPUわからん
tsudaahr
0
170
計算量オーダーの話
tsudaahr
1
380
クラウド初学者が抱える不安について
tsudaahr
0
250
キューとは何か
tsudaahr
0
220
等幅は死んだ(ぇ
tsudaahr
0
92
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
180
何のために文字数をカウントするのか?
tsudaahr
0
93
Other Decks in Programming
See All in Programming
画像コンペでのベースラインモデルの育て方
tattaka
3
1.6k
あまり知られていない MCP 仕様たち / MCP specifications that aren’t widely known
ktr_0731
0
250
JetBrainsのAI機能の紹介 #jjug
yusuke
0
200
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
480
実践 Dev Containers × Claude Code
touyu
1
180
物語を動かす行動"量" #エンジニアニメ
konifar
14
4.6k
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
5
590
React 使いじゃなくても知っておきたい教養としての React
oukayuka
18
5.6k
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
260
LLMOpsのパフォーマンスを支える技術と現場で実践した改善
po3rin
8
820
新しいモバイルアプリ勉強会(仮)について
uetyo
1
250
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.7k
Featured
See All Featured
Making Projects Easy
brettharned
117
6.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Visualization
eitanlees
146
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
The Pragmatic Product Professional
lauravandoore
36
6.8k
What's in a price? How to price your products and services
michaelherold
246
12k
Done Done
chrislema
185
16k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Transcript
マジカルインクリメントと 指数表記 PHP勉強会in広島 vol.2 LTDD 2024-12 #1 @tsuda_ahr
PHP には • マジカルインクリメントという機能があるらしい
マジカルインクリメントとは • 文字列に対してインクリメント演算子を適用すること。
試してみる <?php $a = "2024A0"; for($i=0; $i<30; $i++) { $a++;
echo $a."¥n"; } ?>
結果 https://onlinephp.io/
便利! • ですよね?
よしもっとインクリメントしよう! <?php $a = "2024A0"; for($i=0; $i<300; $i++) { $a++;
echo $a."¥n"; } ?>
結果
何が起こった? • わかるひと?
結果をさかのぼってみる
なぜ? • 2024E0 の次が 2024E1 (=期待値) ではなく、2025 なのか?
指数表記 • 数値リテラル(定数)は、 2024×100 (10の0乗) という表記を 2024E0 と書くことができる。
つまり • 2024E0 は 2024×100 = 2024×1 = 2024 となる。
• 2024 をインクリメントすると、2025 になる。
気を付けよう。 • マジカルインクリメントを使用する場合は、うっかり数値で評価されてしまう 文字列にならないことを検証しておこう。 • そもそもマジカルインクリメントは使わないほうがトラブルがなくて良いか も?
ちなみに • PHP5 までは、16進も数値評価していました。 (PHP7から評価しないように変更)
試してみる <?php $a = "0AA"; for($i=0;$i<1000;$i++) { $a++; echo $a."¥n";
} ?>
PHP5 ではこうなる
PHP7 ではこう。
こちらからは以上です。 • ご利用は計画的に(ぇ
と、いいたいところですが・・・ • マジカルインクリメントは PHP 8.3 から非推奨らしいです。 https://www.php.net/manual/ja/migration83.deprecated.php
ということで、str_increment を使いましょう。 <?php $a = "2024A0"; for($i=0; $i<300; $i++) {
$a = str_increment($a); echo $a."¥n"; } ?>
指数として評価されません。
Any Question? • 間違いとかあればご指摘ください。