aboutsummaryrefslogtreecommitdiffhomepage
path: root/services/nuldoc/content/posts/2023-01-10
diff options
context:
space:
mode:
Diffstat (limited to 'services/nuldoc/content/posts/2023-01-10')
-rw-r--r--services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.md (renamed from services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.dj)24
1 files changed, 8 insertions, 16 deletions
diff --git a/services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.dj b/services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.md
index 9cbb15b..c55cf5b 100644
--- a/services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.dj
+++ b/services/nuldoc/content/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3.md
@@ -12,8 +12,7 @@ tags = [
date = "2023-01-10"
remark = "公開"
---
-{#intro}
-# はじめに
+# はじめに {#intro}
2023 年 3 月 23 日から 25 日にかけて開催予定 (記事執筆時点) の [PHPerKaigi 2023](https://phperkaigi.jp/2023/) において、
昨年と同様に、弊社 [デジタルサーカス株式会社](https://www.dgcircus.com/) からトークン問題を出題予定である。
@@ -28,8 +27,7 @@ remark = "公開"
* その 1 はこちら: [PHPerKaigi 2023: ボツになったトークン問題 その 1](/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1/)
* その 2 はこちら: [PHPerKaigi 2023: ボツになったトークン問題 その 2](/posts/2022-11-19/phperkaigi-2023-unused-token-quiz-2/)
-{#quiz}
-# 問題
+# 問題 {#quiz}
注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。
@@ -152,16 +150,13 @@ function g() {
トークンは PHP の式になっていて、評価すると `Hello, World!` という文字列になる。PHPer チャレンジのトークンには空白を含められないという制約があるが、こういった形でトークンにすれば回避できる。
-{#commentary}
-# 解説
+# 解説 {#commentary}
-{#summary}
-## 概要
+## 概要 {#summary}
例外が発生した行数にデータをエンコードし、それを `catch` で捕まえて表示している。
-{#chain-of-exceptions}
-## 例外オブジェクトの連鎖
+## 例外オブジェクトの連鎖 {#chain-of-exceptions}
[`Exception`](https://www.php.net/class.Exception) や [`Error`](https://www.php.net/class.Error) には `$previous` というプロパティがあり、コンストラクタの第3引数から渡すことができる。主に 2つの用法がある:
@@ -189,8 +184,7 @@ try {
この知識を元に、トークンの出力部を解析してみる。
-{#output}
-## 出力部の解析
+## 出力部の解析 {#output}
出力部をコメントや改行を追加して再掲する:
@@ -220,8 +214,7 @@ try {
[^ras-syndrome]: RAS syndrome
-{#data-construction}
-## データ構成部の解析
+## データ構成部の解析 {#data-construction}
`f()` の定義を再掲する (エラーオブジェクトの行数を利用しているので、一部分だけ抜き出すと値が変わることに注意):
@@ -276,8 +269,7 @@ function g() {
`f()` に `0` を渡したときは 12 行目にある `match` の `0` でゼロ除算が起こるので、行数が 12 となったエラーが投げられる。出力部ではこれに 23 を足した数を ASCII コードとして表示しているのだった。 `12 + 23` は `35`、ASCII コードでは `#` である。これがトークンの 1文字目にあたる。
-{#outro}
-# おわりに
+# おわりに {#outro}
「行数」というのはトークン文字列をデコードする対象として優れている。