diff options
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} 「行数」というのはトークン文字列をデコードする対象として優れている。 |
