From 09b8483ed67d3b85e983ef86c34260081975e1cb Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 2 May 2025 06:47:07 +0900 Subject: fix(blog/nuldoc): remove unnecessary "language" attribute --- .../index.html | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'vhosts/blog/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line') diff --git a/vhosts/blog/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html b/vhosts/blog/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html index a1f17f47..8f028472 100644 --- a/vhosts/blog/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html +++ b/vhosts/blog/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html @@ -117,7 +117,7 @@

特に、C言語でこのような試みをおこなったことがあるかたならそう思うだろう。事実、Cでのこの制約はほとんど無意味に等しい。

-
+
#\
 i\
 n\
@@ -232,7 +232,7 @@
             

また、2文字だと文字列がまともに書けないのも辛い。'' だけで2文字使うので、 「1文字の文字列リテラル」というものを書くことができない。PHP では文字列リテラル中に生の改行が書けるので

-
+
$a
 ='
 a'
@@ -252,7 +252,7 @@
               

まずは普通に書くとしよう。

-
+
<?php
 
 for ($i = 1; $i < 100; $i++) {
@@ -268,7 +268,7 @@
               

for は、3文字もある長いキーワードである。 こんなものは使えない。array_ 系の関数を使って、適当に置き換えるとしよう。

-
+
<?php
 
 $s = range(1, 100);
@@ -287,7 +287,7 @@
               

rangearray_walkprintf は長すぎるのでどうにかせねばならない。 ここで、PHP の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。

-
+
<?php
 
 $r = 'range';
@@ -320,7 +320,7 @@
               

というルールがない場合、「未定義の定数が評価された場合、その定数の名前が値になる」という PHP 7.x までの仕様が利用できる。 例えば、 Fizz という文字列が欲しければ、次のようにする。

-
+
$f
 =F
 .i
@@ -331,7 +331,7 @@
               

こうして簡単に文字列を作れる。 なお、この仕様は 7.x 時点でも警告を受けるので、@ 演算子を使って抑制してやるとよい。

-
+
$f
 =@
 F.
@@ -354,7 +354,7 @@
               

ずばり、文字列同士のビット演算を使う。 PHP では、文字列同士でビット演算 (&|^) をした場合、 文字列の各バイトごとに指定したビット演算がなされ、それを結合したものが演算結果となる。

-
+
$a = "12345";
 $b = "world";
 
@@ -370,7 +370,7 @@
               

これを踏まえ、次のコードを見てみよう。

-
+
$x = "x\nOm\n";
 $y = "\nk!\no";
 $r = $x ^ $y;
@@ -379,7 +379,7 @@
               

実行すると、range が表示される。 さて、PHP では文字列リテラル中に生の改行を直接書いてもよいのだった (「主な障害」の節を参照のこと)。 書きかえてみよう。

-
+
$x
 ='x
 Om
@@ -396,7 +396,7 @@
               

さらに # を使って適当に調整すると、次のようになる。

-
+
$x
 =#
 'x
@@ -429,7 +429,7 @@
             

完成したものがこちら。

-
+
<?php
 
 $x
@@ -595,7 +595,7 @@
             

PHP では、バッククォートを使ってシェルを呼び出せる。 これは shell_exec 関数と等価である。 さて、PHP ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える (当然だが、呼び出されるシェルに依存する。Bash なら大丈夫だろう。知らんけど)。

-
+
<?php
 
 printf(`
@@ -628,7 +628,7 @@
             

もうこれ以上は不可能だと思っていたのだが、この記事の執筆中に解決する方法を思いついたので載せておく。

-
+
<?php
 
 $c = 'chr';
-- 
cgit v1.2.3-70-g09d2