PHP

出典: へっぽこ実験ウィキ『八百科事典(アンサイクロペディア)』
移動: 案内, 検索
「僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょ? 僕なら、10リクエストごとにApacheを再起動しますね。」
PHP について、PHP設計者 Rasmus Lerdorf
「プログラミングを好む人がいるのは知ってますが、全く理解できないですね。」
PHP について、PHP設計者 Rasmus Lerdorf

PHP(英語:Print my HomePage)とは、プログラミング初心者がホームページを自動生成する訓練をするために作られたテンプレートエンジプログラミング言語[要出典]である。

[編集] 概要

PHPはホームページ(ホムペ)をプリントすることに特化した言語である。ホムペ専用言語であるためにそのプリント速度は速く、通常の3倍の速度が出るという。多くの初心者たちが、その疾風のような姿に魅了され、PHPの世界に足を踏み込んでいく。

ところがこれは仮の姿にすぎない。実はPHPの言語仕様は非常に難解であり、一度ハマるとデバッグに通常の30倍かかるという恐ろしい言語なのである。これは、プログラミング初心者を鍛え上げるための修行機能であるとされている。ただし、一説には、中東の某国(イスラ○ル)が、対立する国の技術者をハメるために作られたとも。

とはいえ、使いこなせれば通常の3倍のプリント速度が出る高性能さも合わせ持つのである。そのため、もとは初心者の修行用言語ではあったが、一般用のプログラミング言語の遅さに痺れを切らした上級ホムペ技術者たちによっても、PHPは愛用されている(プログラミングに自信が無い人は決してマネしないでください!)。

[編集] 仕様

以下はすべて仕様であって、断じてバグではない。バグではないといったらバグではない。バグではない。

  • 「超弱い動的型付け」を採用しており、データを勝手に変換・解釈してくれる。そのせいで、誤動作しても原因がつかめない。
  • '3'+5は8である。型宣言なにそれ美味しいの?である。便利すぎる!
  • var_dumpが便利すぎて禿げる。配列や文字だけでなく、関数までも値を判定できる。
  • "0x0A" == "10" は真である。これはべんり!!
  • 関数の名前に一貫性がない。(例:str_replace, strlen, parse_str ...)。これを覚えれば脳の体操になる。
  • 痒いところに手が届くほど関数が多い。ただし、全部の関数を覚えようとすると1000以上ある。これだけで十分脳トレ。
  • 引数の順番に一貫性がない。(例:in_array は第一引数が探索対象、strpos は第二引数が探索対象)。これも脳トレ。ほかに同じコールバック関数なのにarray_mapは第一引数が関数、array_walkは第二引数が関数、しかも前者は非破壊的、後者は破壊的で戻り値がboolだったりする。完全に脳トレ。
  • ファイル関数の使いづらさは異常。ポインタなどあってないようなものである。しかし、理屈を掴めば好きな場所を操作できるので病みつきになる。
  • メールなんかも送れてしまうが、正しく記述しないと大抵文字化けして即席スパムのできあがり。脳トレ。
  • ヒアドキュメントを使えば、PHPプログラム中にjava scriptを埋め込んだりできるが、IEのコンソールでdoctype宣言の位置がおかしいと怒られる。脳トレというより孔明の罠。
  • バージョンどころかリビジョンを変えただけで関数の振る舞いが違うことがある。アハ体験。
  • ↑と相まってプログラムの振る舞いがにわかには予想できない。新鮮な気分で毎日をスタートできる。
  • 異常な文字エンコーディングも受けいれてくれる。PHPは優しくて寛容である。
  • 変数$aにオブジェクトが格納されているときに「$b=$a;」とすると、複製がコピーされる。ちなみにオブジェクトの参照(リファレンス)を代入したいときは「$b=&$a;」とする。Singletonのつもりで = とした日にゃ恐ろしく見つかりにくいバグとなる。脳トレ。
  • 「.」は文字列連結演算子であり、オブジェクトのメンバ参照には「->」を使用する。普通の言語とはちょっと違う。フツーの奴らの上を行け!当然、PHP初心者にこの記号を見せると目が点になる。似ているが「=>」とは違う。
  • 「::」(スコープ演算子)なんて見せた日には初心者の大半が逃げ出すが、static::の挙動の意味不明さは上級者も冷や汗たらたらである。脳トレ上級編。
  • 例外処理機構があるのに、ほとんどの関数はエラー時に例外を投げない。ぶっちゃけ例外ってうざいよな。
  • 細かい話↓
    • php.iniのpost_max_sizeを2048Mにすると、エラーも出さずに何もpostされなくなる。
    • sort関数の振る舞いは相当おかしいらしい。おかしすぎて筆者も説明しきれないほどである。実に奥が深い。
    • PHP5.0 の fgetcsv() の振る舞いはロケールの設定に依存する。
    • strpos('abcd', 'a') は 0 を返すが、0 は偽である。
  • バージョンが上がるにつれて色々できるようになっていく。オブジェクト指向は勿論のこと、クロージャ、ラムダ関数までできたりする。何を思ったか、魔のgotoまで使用可能に。素人にはお勧めできない。使うと、ソースを追えなくなり周囲まで巻き込んだ脳トレとなる。
Wikipedia
ユーモア欠落症患者のために、ウィキペディアの専門家気取りたちが「PHP: Hypertext Preprocessor」の項目を執筆しています。
個人用ツール
View and edit namespaces data

変種
操作
案内
編集者向け
姉妹プロジェクト
ツールボックス
他の言語