「PHP Way」とは何ですか?


8

特定のフレームワークまたはアプリケーションの説明を「Pythonic」、特定の人物を「Perlハッカー」、または「真のRubyコード」など、「Way」への参照が常にありますが、「PHPハッカー」はどこにあるのでしょうか。 「PHP-ic」アプリケーション、「真のPHPスタイル」?

これは私に考えさせました-PHPは明確なスタイルさえ持っていますか?PHPが他のスタイルに簡単に「変更可能」であると言っても、妥当な言語であれば同じことが言えるので、カウントされません。

どんな入力でも大歓迎です。


3
「それでも機能する場合は、終了していません」
sevenseacat

quora.com/How-does-a-programmer-become-a-brogrammer-おそらく「PHmoronic」と呼べるかもしれません。
psr

回答:


13

他の多くのプログラミング言語とは異なり、PHPには統一された考えや一連のコアアイデアはありません。それは、非常に実用的なperlスクリプトのセットとして始まり、正式な設計プロセスをほとんど必要とせずに、必要に応じて機能が追加されました。その結果、言語は非常に便利で完全ですが、それだけでは一貫性がありません。言語が非常に人気があるため、事態はさらに悪化します。新しい機能が導入されるとすぐに、誰もがそれを使用し始めるので、それは実質的に堅実です。いくつかの設計上のミスは、このように連結されており、およびPHPのチームは本当に苦労の人々が彼らから離れて歩いてきてい- register_globalsmagic_quotes一度に良いアイデアのように思えますが横行判明物事のちょうど2つの例です。

別の要因は、PHPを中心に育った文化です。PHPの人気が高まり始めたとき、PHPの一般的な使用例は、サーバー側の機能の小さなスニペットを静的HTMLドキュメントに追加することでした。ターゲットオーディエンスの大部分は、PHPを使用して静的なWebサイトに少し動的なものを追加する趣味家やプログラマーではありませんでした。結果として生じる文化は非常に実用的であり、「適切な方法」を確立することにあまり関心がありません。非常に洗練されたPHPを作成することは可能ですが、ユーザーコミュニティの大部分は、機能するかぎり、PHPにあまり関心を持ちません。

対照的に、python、ruby、Lisp、C#、Haskellなどの言語には当初から哲学があり、コミュニティは一般にそれを採用しており、言語はそれに沿ったものになっています。(興味がある場合import thisは、インタラクティブなPythonセッションを入力してください)。哲学を持つことは、言語を使用および拡張するためのガイドラインがあることを意味し、それはより均質なコミュニティにつながります-哲学に同意しない場合は、離れて歩いて自分に適したものを見つける可能性が高くなります。 ; 結果として生じるコミュニティは、あらゆる種類のものについてコンセンサスに達する可能性が高くなります。

とはいえ、PHPには長所と短所があり、エッジケースが曖昧です。他の言語と同じように、慣用的なPHPコードを書くということは、長所を利用し、弱点や曖昧さを避けることを意味します。


PHPはどのように一貫していませんか?言語の単純さが単純であるため、使用する構文を推測する必要のない非常に直交した言語につながります。特に、複雑なデータ構造(ツリー、リンクリスト、エッジグラフ)は、Pythonとほぼ同じように処理され、JavaまたはC ++ STLよりも確実に処理されます。
Jamesアンダーソン

3
PHPはすべてをグローバル名前空間に配置します。さまざまなAPI関数は異なる命名規則を使用し、一部は引数をインプレースで変更しますが、同様の状況では変更された引数を返します。mb_XXX()バージョンとして使用できるのはその文字列関数の半分のみです。異なる3種類の変数があります。スコープルール、関数を呼び出して定数を定義したり、関数を呼び出してグローバル変数を作成したり読み込んだりできます。
tdammers

@tdammers PHPは「すべて」をグローバルスペースに配置しませんが、多くの関数はグローバルネームスペースにありますが、他の多くはそうではありません-たとえば、PDOまたはSPLを参照してください。グローバル変数、ローカル変数、静的変数は多くの言語で存在し、PHPに固有のものではありません。関数を呼び出さずに定数を定義できます。グローバルにアクセスする関数を作成することもできます(これは、グローバルを持つという点の一種です)が、これにはまったく何の問題もありません。
StasM 2011

この回答がその主張を裏付ける単純な理由で、ベストアンサーとして選択する必要があると思いますが、他の回答も非常に役に立ちました(そして、このような質問がどれほどの議論をもたらすかを理解するのに役立ちました!)
ジョナサンチャン

15

私が人々がPHPウェイと言うとき、それには負の重みが付いていると思います、それは私たちが多機能ショップ(Python、C#、Ruby)で使用した用語です。gotoのリーク、ファイルハンドルのリーク、SQLインジェクションの脆弱性、非常に深いネストされたループ、3000行の関数など、「そこにあるだけで実行する」など、「 PHP-way '。ピアレビューで、コードが非常に「PHPの方法」であると誰かが私に言った場合、私は深く気分を害するでしょう。

これによりいくつかの問題が発生することを感謝します。そのため、優れたPHPコードを生成することで知られている人々がいて、PHPがいくつかの主要な本番サイトで使用されていることを認めます。私は、群衆が最もよく考えて見ていることを言っているだけであり、意見は少数派ではなく多数派の行為によって運ばれます。


5
おかしなことは、あなたが言及したことはPHPとはまったく関係がないということです。そして、最近まで、gotoさえなかったので、gotoでPHPコードが非常に多くなって、独特のスタイルに名前が付けられた可能性はありません。
StasM 2011

StasMは、任意の言語で、保守不能、安全でない、またはパフォーマンスの低い(またはすべての混合)モンスターを作成できます。最近のVM /インタープリターはほとんど問題になりません。私が言っているのは、PHPのエントリ、グローバル名前空間の汚染、およびその他の言語の機能/欠点に対する低い障壁は、とにかく捨てられて、それゆえ評判の群衆を引き付けているようだということです。その紛れもない評判、私はちょうどそれにいくつかの光を
当てよ

StasM、あなたは要点を逃しました、私がそれがgotosを含むであろうと私は決して言いませんでした。
sa93

3
@ sa93-私はphpの大ファンで、php3から使用しています。StasMはかなり正しいです-ほとんどの人はPHPの出力を悪いと考えています。これには正当な理由がありますが、そのほとんどがそうです。それと一緒に暮らす必要があるだけで、プラス面では、PHPの契約で非常に簡単に輝きます。
ジョンノ2011

私が見たどのphpコードよりもずっと悪いJ2EEコードをたくさん見ました。
Jamesアンダーソン

4

「phpの方法」がある場合は、「それを実行するだけです!」

phpには、クラス、モジュールの名前空間、イントロスペクションなどのすべての最新のOO構成と、通常はPythonなどのより魅力的な言語に関連付けられている動的プログラミングのすべての機能があります。それらが単にその目的のために使用されることはめったにありません。あるいは、PHPプログラマーが実装の「純粋さ」にこだわっているのを見ます。

なぜこのような文化の違いがあるのか​​はわかりませんが、そこにはあります。

そこには多くの恐怖があり、おそらくこれは、多くの「php」コードが「My First Webapp」または「My First Program」でさえあることを反映しているのかもしれません。

個人的には、専門的に記述されたphpコードの読み取りと理解は非常に簡単です。一般に、JavaアプリがすべてのFactoryクラスとXMLファイルのロジックの半分よりもはるかに読みやすいです。


4

PHPの方法は「ダクトテーププログラマー」だと思います-迅速に出荷し、迅速に出荷し、後で他のすべてについて心配し、将来を考えずにパッチのバグを修正してください。これはPHP自体を非難するものではありませんが(任意の言語で実行できます)、PHPの開発者がソフトウェアエンジニアリングと設計パターン、SOLID、テストなどについて疑問を持ち始めたのはごく最近のことです。


2

PHPのアイデアは実用的だと思います。それぞれの場合でそれが何を意味するかを定義することは困難ですが、たとえば、何かを行うには1つのHTMLフォームと5行のコードが必要な場合、20のクラスを持つMVCフレームワークをそこに配置しないでください。また、逆に、2,000万人が使用するアプリケーションを開発する場合は、そこにフレームワークを配置し、ロジック、プレゼンテーション、フロー制御を個別に用意します。しかし、ここではPHPについて特別なことは何もないため、満足のいく答えにはならないかもしれません。

PHPスタイルは1つだけだとは思いません。私は個人的に、すべての言語ユーザーに適合する1つのスタイルがあるという概念は、言語の使用分野が非常に制限されている場合にのみ意味があると思います。これは、PHPには当てはまりません。

特定のアプリケーションにはスタイルがあります。たとえば、Zend Frameworkを見ると、定義済みのインターフェースや制御されたAPIなどを備えたOOコードがあり、使い慣れた設計パターンをすぐに認識できます。一方、Drupalのような、より手続き的なアプローチを取るアプリケーションがあります。

「本当のPHPスタイル」はあまり得られないと私は理解していますが、それはおそらくそのようなものがないためです。ベストプラクティスなどがありますが、それはあなたが探しているものではありません。


1

一部の人々はphpを軽蔑の印として使用しています-ただ事実として、個人的に私はファンです。

しかし、私にとってphpのアプローチを定義したのは、本質的にアプリケーションコンテキストの欠如です。.NETやJavaの世界と比較して、組み込みのアプリケーションコンテキストはありません。

これにより、phpサーバーは本質的にステートレスになります(セッションが別のサーバー(共有ディスクやdbなど)に移動される限り)。

これは、私がphpの方法について考えるとき、私が考えることのほとんどです。


1

別の答え!今回はプログラミングの「文化」についての観察です。

PHPは、Javascript(ECMAscript to pedants!)と同じ位置にあります。2002年頃でした。少人数のエキスパートプログラマーがその卓越性を高く評価しましたが、一般的な意見は、それがバナーのスクロールとユーザーの迷惑行為にのみ役立つ貧弱であいまいなスクリプト言語であるというものでした。ポップアップ付き。

その後、AJAXが登場し、突然、全世界がJavascriptのパワーとエレガンスに畏敬の念を抱きました。

実際、JavaScriptほどエレガントではありませんが、phpはその言語の多くの能力と単純さを共有しており、大規模システム用にphpをプログラムするための「正しい」方法については総意が一致しています。

専門分野でのphpの優れた点のもう1つの指標は、最も深刻なアプリケーションのフレームワークがないことです。非常に経験豊富なプログラマーの多くは、メガフレームワークを使用せずに「php」をそのまま使用できるので満足しています。フレームワークやその他の支援の急増は、Java、Pythonなどが正しく理解していないこと、およびこれらの言語を使用するプログラマーが非常に不幸であり、Webアプリケーションの作成方法について確信がないことを示しています。しかし、読めないXML構成、今月のテンプレート方言、または独自のORM方言を読まずに、純粋な単純なphpコードを使用して複雑なWebサイトを正常に実装する方法を見ると、間違った結論を導きます-phpはIntegerFactoryクラス、依存関係の注入などがないので、残念です。

実際、これらすべてのものはphpで簡単に実装され、必要に応じてよく使用されます-実装は通常phpの数行であり、大規模で同じことをすることに慣れているプログラマーには認識されませんライブラリと複雑なAPI。

phpはシンプルです。「シンプル」は、ソフトウェアに与えることができる最高の補完であり、達成するのが最も困難です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.