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
220
マジカルインクリメントと指数表記
PHP の特徴的な機能の一つである文字列へのインクリメントに関する注意喚起と、指数表記という普段あまり目にしないリテラル表記についての紹介です。
tsuda.a
December 08, 2024
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
バックアップしていますか?
tsudaahr
0
130
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
130
NPUわからん
tsudaahr
0
190
計算量オーダーの話
tsudaahr
1
400
クラウド初学者が抱える不安について
tsudaahr
0
290
キューとは何か
tsudaahr
0
240
等幅は死んだ(ぇ
tsudaahr
0
110
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
190
何のために文字数をカウントするのか?
tsudaahr
0
110
Other Decks in Programming
See All in Programming
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
6
1.8k
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
ゲームの物理 剛体編
fadis
0
390
Patterns of Patterns
denyspoltorak
0
420
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
ゆくKotlin くるRust
exoego
1
190
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2k
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
Vibe codingでおすすめの言語と開発手法
uyuki234
0
160
Cap'n Webについて
yusukebe
0
160
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
410
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Statistics for Hackers
jakevdp
799
230k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
54
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
78
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Building AI with AI
inesmontani
PRO
1
610
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
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? • 間違いとかあればご指摘ください。