カテゴリ | その他 |
サマリ | func.php中の $get_magic_quotes_gpc = 0; について |
バージョン | 1.5.4 |
投稿者 | ぬぺぺ |
状態 | 質問 |
投稿日 | |
lib/func.php の function input_filter($param) の中で
if (function_exists('get_magic_quotes_gpc')) {
// No 'get_magic_quotes_gpc' function in PHP8
$magic_quotes_gpc = get_magic_quotes_gpc();
} else {
$magic_quotes_gpc = 0;
}
という処理があったのですが、なぜ false ではなく 0 を代入してあるのでしょうか?
get_magic_quotes_gpcは真偽値を返す関数だったらしいので、普通にfalseを代入すれば良いのではないかと思ったのですが、何か理由があるのでしょうか。
大した質問でなくて申し訳ないのですが、気になってしまったので…
よろしくお願いします。
(追記)この状況ではfalseを代入するべきだと思うんですけど~。という指摘ではなくて、PHP詳しくないためシンプルに理由が気になったという質問です。
紛らわしい書き方になってしまいすみません。あまりここでするべき内容の質問ではなかったことも申し訳ないです
- コードを書いた当人ではないので理由は答えられませんが、客観的な説明ならできると思います。
$get_magic_quotes_gpc 変数の型は未宣言で動的型付けとなっており、代入値をbool型に限らなくてはならない理由は本質的にはありません。初期値もbool値ではなくNULLになっていますし。
ここでは他方の分岐にある get_magic_quotes_gpc() 関数に対応させて false とするほうが文脈として妥当だろう、と指摘したいのでしょうが、そういう場合に関するコーディング規約を定めていない以上は宗教論争にしかなりません。だからといって本当に規約化すると、もっと複雑な状況下で不自由になりかねません。「falseで良い」などとは極めて単純なケースだから言えることで、容易に一般化できることではないのです。
いずれにせよ、保守性のためには些細なことでもわかりやすく書いたほうが私も良いとは思いますが、そうしたプログラミングに関する提案や議論なら「開発サイト」のほうですることをお勧めします。ツッコミどころのあるコードは他にいくらでもあるでしょうから、ここでいちいち疑問を呈しているときりがありません(していけないことはないでしょうが、ユースケースに関する質問が埋もれてしまう)。
なお本件は該当しませんが、エンバグ避けや互換性のためあえて古い書き方のまま手を加えていないところ、その作法に準じているところもあるようです。 -- -
- まるで 0 を擁護しているかのようですがこれは一般論で、個人的にはやはり false を使うのが自然だと思いますね。0 を代入する意義を強いて挙げるとすれば、どちらの分岐を通ってきたかが型からわかる、というところでしょうか。もっとも、続くコードにそんな必要はありませんが。 -- -
- $magic_quotes_gpc をbool型に宣言しておけばそもそもこんな問題は起こりませんが、そうすると古いPHPで動かなくなります。思いつく折衷案は、型宣言はしないがしたつもりでコーディングする、という規約です。 -- -
- 回答ありがとうございます!確かにあまりここでするべき質問ではなかったですね…申し訳ないです。 -- ぬぺぺ
- PHPは正直全然詳しくないので、こういう書き方をする理由やメリットなど知れてたいへん勉強になりました。ありがとうございます。 -- ぬぺぺ
- ↑他のコメント見る限り「全然詳しくない」というほど詳しくないこともなさそうですが…笑 -- Sドル
- いやほんと全然詳しくないんですこれが…キホンくらいはわかってますが、手探りであてずっぽ修正してるレベルです。 -- ぬぺぺ
- というか、他の場所のコメントも見てくださってたんですね。ありがとうございます。 -- ぬぺぺ
- 書いた本人です。PukiWiki全体として0をfalseとして使っている傾向があり、 (pukiwiki.ini.php 等を見てみてください) 「既存コードに合わせる」の精神で 0 を使いました。既存コードが無ければfalseが適切と思います。インデントを4スペースでなくタブにしているのも同じ理由です osdn.net:projects/pukiwiki/scm/git/pukiwiki/commits/a6cac21c76 -- umorigu
- と、思って書いたのですが「get_magic_quotes_gpcは真偽値を返す関数だったらしいので、普通にfalseを代入すれば良いのではないか」と言われるとその通りですね。 get_magic_quotes_gpc の結果を格納する変数なのだからfalseにするべきでした。直します -- umorigu
- コメントありがとうございます!まさかのご本人さまから回答いただけてびっくりです。 そのような理由があったんですね。コードの主流に合わせた、というのは納得です。おかげさまでスッキリしました。ありがとうございます!(&バグでもないのにお手間かけさせちゃうことになっちゃってすみません…) -- ぬぺぺ