「Spirit Sword」という名前の Python プログラマーが、回答だけでなく、コメントでも、失効した PHP のジュニア資格を利用して、意味のないことを話しているのを見ました。彼を数回平手打ちしてください。
まず第一に、誰かがすでに下でそれについて言及しています、親愛なる、「チューリング完全性」について聞いたことがありますか?聞いたことがない場合は、まず Wikipedia にアクセスしてください (https://zh.wikipedia.org/wiki/%E5%9C%96%E9%9D%88%E5%AE%) 8C%E5%82 %99%E6%80%A7) 試してみてください。 PHP と Python はどちらもチューリング完全言語であるため、一方にできてもう一方にできないことはありません。
質問に答えたので、お約束の顔面平手打ちの時間です。つまり、いわゆる Python にはできるが PHP にはできないことについて「Spirit Sword」が言ったことを見てみましょう。繰り返しは避けます。「「Groove」によって反論された部分は繰り返しません。奇妙な発言の一部は「Spirit Sword」に関する彼のコメントから引用しています):
「私が最初に PHP を書いたとき、私は主に 1.これはCライブラリです。それが悪いというわけではありませんが、このライブラリを使用すると、いくつかの重要な関数が機能しなくなります。たとえば、URL を読み取り、その戻り値の一部をストリームとして処理したいと考えています。マニュアルを読んでください:curl_setopt の CURLOPT_FILE 、「値はストリーム リソース (を使用) である必要があります。」
fopen() など) の次の値に対して、
オプション パラメータは、ストリームがサポートされていることを明確に示しています。
さらに、サードパーティのライブラリも多数チェックしたそうですが? 7000 個以上のスターが付いたライブラリである guzzle (GitHub - guzzle/guzzle: Guzzle、拡張可能な PHP HTTP クライアント) を見たことがあるかどうかはわかりません。
2. 「返されたストリームはファイルのように均一に処理できるのがベストです。このストリームを他の言語に書き込むには、outputStream などのメソッドを直接使用できます。基本的に他の言語でもこのような機能はサポートされていますが、PHP では「上記と同様、前述の通り、はい、fopenしました。もちろん、ファイルと同様に一律に処理できます
3。「その他、HTTP/1.1接続を自動的に再利用するなどはできません。」ナンセンス、あなたはWebサーバーについて話しています。 apache/nginx に移動します。もちろん、Web サーバーとして PHP を使用することにこだわるのであれば、Swoole を使用することも不可能ではありませんが、それが C で書かれた拡張機能であると考えるのであれば、それは考慮されません。次に、Workerman を見てみましょう (えっ? これも C ライブラリを使用しているので、カウントされません? いいですか、システムに付属のライブラリの使用を許可しないのはやりすぎです)。
4. 「他の言語の Web サービスのフロントエンドの nginx 設定がすべて統一されていると、運用と保守から不満が出てきました。PHP だけが大幅に書き直されました。 PHP が URL マッチング ルールに従ったバインディング ハンドラーをサポートしていないというだけの理由で、あなたの業績不振と大量の書き換えの責任は誰にあるのでしょうか?現在の主流のフレームワークは、基本的に、index.php に書き直され、内部で分散および処理される単一エントリーの設計になっています
5. 「PHP であれやこれやができると常に考えています。これは完全に、達成したいことによるものだと思います。ビジネスがシンプルすぎて、本当に絶妙なデザインを見たことがありません。 』: 同様に、PHP も、能力や知識が少なすぎると、いわゆる絶妙な設計を実現できます。
6. 「あなたの PHP だけが美しくデザインされていますが、使いにくいです。構文が厳格すぎるため、ヌードル コードしか書くことができず、Python や Java などの他の言語を読むことができます (Java はあなたよりもはるかに優れています) )、OOP を使用してビジネス ロジックを抽象化する方法、デザイン パターンを使用する方法、ビジネス機能をモジュール形式で管理する方法、およびプラグイン拡張機能を提供する方法を参照してください。これを行うことができる PHP はありません。 』: PHP: はじめに PHP5 (10年以上前) では当初から OOP が提供されていましたが、ビジネスロジックの抽象化、デザインパターンの使用、プラグインのモジュール化などはすべてプログラムの問題ではないでしょうか。語学力が低いからでしょうか?
7. 「私は少なくとも 3 年間、SAE (Sina Cloud Service) 上で PHP を書いてきました。アプリケーションのピーク時に、(fsockopen を使用して) SAE がクラッシュしました。PHP で最も嫌な問題に遭遇しました。」 』 正直、あのSAEゴミモンスターphpですか?私は何度もクラッシュしました。SAE が背後で多くのことを変更したことをどうして PHP のせいにすることができますか?その結果、さまざまなデプロイメントが行われました。なんと、PHP だけを区別する必要があります。サードパーティの拡張機能は、Web サイトのディレクトリにコピーする必要があります。パッケージ管理機能はありません。名前空間の競合に注意してください。」 C 拡張機能をインストールするには、設定ファイルを変更する必要があり、とても手間がかかります。 』: PHPのパッケージ管理についてはComposerを参照してください
名前空間の競合も解決されました。 C の拡張機能については、pecl9 を参照してください。「しかし、クラスを使用するたびにローカル ディレクトリを検索する言語が本当に必要ですか?」: psr-0、psr-4、composer の autoload
を読んでください。10 「オートロードのメカニズムは、ローカル ディレクトリでクラス名と一致する名前を持つファイルを見つけてロードすることに依存していますよね?」: 仕様に従わずに PHP を自分で実装することもできます: spl_autoload その後、やりやすいと思うことを何でも実行してください。
11. "名前空間の競合": PHP: 名前空間の使用: エイリアス/インポート
12. "Java の Web の主要なサポートの 1 つは Spring です。Spring のおかげで、大規模でプラグイン スタイルの使いやすい設計になっています。 Model Web は構築できますが、PHP は構築できません。これはすでに死刑宣告です。つまり、PHP では Java の規模で Web アプリケーションを開発できないことを意味します。 』:言いたいことはIOCだと思いますか? Service Container など、多くのフレームワークでもこれが実装されています
ところで、Facebook はあなたの目にどれくらい小さいのでしょうか?
欠点が多すぎるので、詳細には触れませんが、最も基本的なことをいくつか説明したいと思います:
まず第一に、php は C で書かれています。これに問題はありますか?あなたの論理によれば、ブートストラップを完了できるものだけが言語と呼べるのでしょうか?
毎回ロードするかどうかは、Apache/nginx での動作方法によって決まります。あなたの質問をより専門的に翻訳すると、PHP は単独で Web サーバーを実装できますか?答えは「はい」です。まず、php -S が付属しています。さらに、swoole (C 実装)、workerman (php 実装) などのプロジェクトを参照できます。
最後に、php を知らなくても習熟しているふりをするのは、とても大変なことです。たくさんの人に顔を叩かれたら傷つきますか?
多くの人が Python と PHP について言語レベルから議論します。私の能力には限界があり、資源生態学の観点からしか議論することができません。
素晴らしい 2 つを見てみましょう。
ziadoz/awesome-php
vinta/awesome-python
php が主に Web 開発のために生まれたことを知るのは難しくありません。そして、Python は Web 以外にも多くの分野をカバーしています:
ビッグデータ処理
データ可視化
機械学習
組み込み開発
大きなソフトウェアapi
デスクトップアプリケーション
CPython と C の関係のおかげで、多くのソフトウェアが Python API インターフェイスを備えています。効率に関して言えば、データ処理に Python を使用することは、間違いなく numpy と pandas から切り離せません。もちろん、Web アプリをすばやく作成したい場合は、PHP を使用することに問題はありません。結局のところ、PHP は最適な言語です。
Python Note 1: 簡単な紹介とコメントZhihu は、人々が Python を書くことを誇りに思い、php を書くことを恥ずかしいという状況を形成しようとしています。php を書くことは本当に恥ずかしいことですか? Python を賞賛し、php を貶めることが、Zhihu ではポリティカル コレクトになりつつあります。
最近、Python が php を使用できるかどうかという質問がありますが、誰もがチューリングに相当しますが、php も言語と見なすことができますか?
Python は B のインストールに使用できますが、php はインストールできません。Zhihu では、通常、phper は Python に負けます。
Python には 2 つと 3 つのバージョンから選択できますが、php にはできません。
Python もこれを行うことができます: a = [1,2,3] 長さを計算します len(a)、sort、a.sort()、これは単に C シリーズの手続き式とオブジェクト指向の両方を吸収するだけです。 PHP はいいえ、すべて醜い手続き呼び出しです。
Python のインデントは、コードに夢中になっている人にとってはまさにありがたいことです。醜いコードを書く方法はありません。
上記は単なる戯言です。私は php と Ruby を少し知っているだけで、Python は知りません。でも、Python はまだ優れた言語であると実感しています。Haskell に似たリスト内包もあります。
もうどうしようもありません。Lingjian の Python プログラマーは、PHP のハッキングに関する質問に対するあなたの愚かな回答をよく見ていました。 PHP をハッキングするのは問題ありませんし、私もよくハッキングしますが、PHP に関するあなたの答えはまったくナンセンスで、あなたはあなたの答えの一言一句であなたの顔を平手打ちするつもりです。
1. 「マルチスレッドのサポートが不十分であることはその 1 つです。」 言い換えれば、php、ruby、python などの主流のスクリプト言語の中で、php が最も優れているという点です。マルチスレッドのサポート。 py と Ruby は、手を抜き、グローバル ロックを追加して偽のマルチスレッドを作成することで、マルチスレッドをサポートしています。PHP 自体は、言語コアをスレッド セーフ バージョンと非スレッド セーフ バージョンに変換しています。糸通し。実際、スクリプト言語は高級言語としてはマルチスレッドに強くないため、私は基本的にマルチスレッド機能を使用しません。マルチスレッドのタスクを使用したい場合は、依然として Java/C++ を使用することが多いです。静的に型付けされた言語。
2. たとえば、バイト ストリーム、マルチバイト文字列、および Unicode 文字列が区別されない場合、PHP ファイルに Unicode、utf-8、および gbk 文字列を同時に記述する必要がある場合は、16 進数を使用する必要があります。彼ら全員にとって、これは何という衝撃的な経験だろう。」嫌悪感を抱かずに Python を使用したコーディングで大失敗を経験した人は何人いるでしょうか?私は基本的に、PHP を使用する際にコーディングの問題を心配することはありません。なぜpy3を使わないのでしょうか?はい、py3 の py2 との愚かな非互換性は、サードパーティのライブラリ コミュニティに多大な問題をもたらしていますが、ubuntu16.04 だけがあえて py3 にアップグレードしているのは残念です。
3. 「たとえば、戻り値が複数ある場合、Python はタプルを返し、単純な構文 (a, b = my_func()) を使用してタプルの内容を別の変数に復元できます。PHP は配列のみを返すことができ、コードを何行も書くのは醜いです。「php は配列だけでなくオブジェクトなども返すことができますが、php には py のような構文がありません。」私は構文シュガーについてはあまり気にしていないので、それを使用するときにのみチェックします。あなたが言及した機能はPHPで利用できるようです: $my_array = array("Dog","Cat","Horse") ;list($a, $b, $c) = $my_array; しかし、それはまったく問題ではありません。
4. 「PHP が今日まで生き残ることができるのは、主に C を調整できる最初のモジュールであるため、C プログラマが段階的に続行することに依存しているからです。PHP は CPU を大量に使用する関数を C に記述します。」パフォーマンスのためだけのモジュールです。これを恥じる必要はありません。 php7 の最大の特徴は、可能な限り互換性を保ちながらパフォーマンスを向上させることです: https://pages.zend.com/rs/zendtechnologies/images/PHP7-Performance%20Infographic.pdf 。私の知る限り、php 言語とコミュニティは順調に発展しています。
5. 第二に、PHP プログラマーは一般に質が低く、コードを書くための要件が非常に狭いため、基本的に、Python を 1 回か 2 回書いた程度では、この言語の厳しい限界に遭遇することはありません。もう一度始めたい。PHP をもう一度使う。「このようなマップガンの使い方は間違っています。言語ごとに使用シナリオがあります。以前は py をよく書きましたが、Web 関連には PHP の方が便利だと思います。」
6. 「誰かが純粋な PHP を使って、OpenStack のようなクラウド コンピューティング管理プラットフォーム、Flask のような小さくて優れた Web フレームワーク、Scrapy のようなシンプルで使いやすいクローラー フレームワーク、あるいはリクエストのような HTTP クライアントを作成するまで待ちます。今日は libcurl をドラッグしてなんとかするということで、PHP でできないことについて話しましょう。「私は OpenStack を使ったことがないので、コメントするのが不便です。ここのチームは Flask を使用していて、パフォーマンスの問題が発生したため Java にリファクタリングしました。」スカピィ、口を開けて要求したら今日はこの2発で顔面を殴ってやる。クローラー フレームワークとして、Scrapy は基本的にいくつかの設定ファイルを作成し、それを実行できます。ただし、クローラーの本質は、httpclient を開いて HTML+DOM 操作を取得してデータを抽出することです。そのカプセル化は初心者に適しています。いくつかのパラメータを変更して実行を開始するだけですが、スケーリングが特に不十分です。ここでクローラーに取り組んでいる py プログラマーが、特別なカスタマイズが必要なクローラーを完成させたい場合、リクエストを直接オープンし、Beautifulsoup に戻ってデータを抽出します。リクエスト httpclient は libcurl に限定されず、guzzle も非常に使いやすく、優れた非同期サポートを備えています。 guzzle を使用する場合、libevent のイベント ライブラリを使用して、1 つのプロセスで 1 つの guzzle httpclient だけを開き、100 の Web サイトを非同期で同時にクロールできますが、リクエストには非同期がサポートされていません。
私がこれを言っているのは、あなたの顔を平手打ちするためだけです、上記は
---------------------------- --- ----------------
Coldwings の比較的有能な回答を読んだ後、私は突然興味を持ちました。
エンコーディングの問題については、次のように思います。議論は十分に明確でしたので、ここで感情的なことには答えません。
2. 私は py での非同期同時実行ソリューションを長い間研究してきました。grequests (GitHub - kennethreitz/grequests: Requests + Gevent =3. コルーチンは基本的に非同期を同期的に書き込むため、コルーチンが非同期よりも並行性に優れているというわけではありません。
4. phantomjs をスケジュールできるのは Scrapy だけではありません (phantomjs を任意のクローラーに統合できます)。実際、私は php で phantomjs を同時に駆動した経験があります (同時キャッシュを含め、1 つの i7 で 80 個の phantomjs インスタンスを同時に駆動できます)。 、プロキシ、リソースリーク、ヘッドレス開発の困難などのさまざまな落とし穴への対応)、pyを使用してphantomjsを駆動する場合も同様だと思います。
5. クローラーに関して言うと、いわゆる分散とは、複数のマシンによる同時クロールを指しますが、もちろん、多くのマシンを持っているわけではありません。 PHP を使用して、redis に基づくマルチノード同時クローラー ソリューションを作成しました。最大 150 の phantomjs + 150 の guzzle httpclient を同時に実行できる 2 台の PC を備えたクローラーがあります。マルチ クローラーのコラボレーションとタスク分散の場合、専用のメッセージ キューよりも Redis をお勧めします。これは、Redis の単一マシン 100,000 qps がクローラーの同時実行性を満たしているだけでなく、スケジューリングとクローラー スケジュール ステータス用の 5 つの非常に使いやすいデータ構造も備えているためです。表示と動的パラメータ設定は非常に役立ちます。
6. 私のクローラーの同時実行数は 100 で、これは TCP 同時実行数ではなく、単一のプロセスと単一の httpclient の下で非同期および同時実行するために PHP を使用しています。スレッド プール ソリューションと非同期同時実行ソリューションの長所と短所は十分に明確に議論されていると思います (さらに、Guzzle に基づく私の単一の httpclient 非同期マルチ同時実行クローラー ソリューションは非常に優れていると本当に思います。これを非常に誇りに思っています)ご興味がございましたら、この問題について説明した私の 2 つのブログをお読みください: クローラーの同時実行の問題についての話 と、Redis の使用経験 + 同時実行性の高い httpclient の理解 )。
7. 私は以前、Python の同時 http ソリューションも調査したことがあります (Python で 100,000 の HTTP リクエストを送信する最速の方法は何ですか?)。これには、あなたが言及した grequests と Tornado の非同期 httpclient も含まれています。 Tornado の非同期 httpclient は libcurl (tornado.httpclient) に基づいており、PHP の guzzle のデフォルトは libcurl ですが、libevent などの他のイベント ライブラリを選択することもできます (私はそのようなものを探していました)。 httpclient は py と java の下でしばらく使用されます)。
最後に、PHP をハッキングした Lingjian の Python プログラマーの発言がすべて本当に間違っていたことが分かりました。私は PHP については知っていますが、このように他人を誤解させるのは本当に迷惑です)、私は飛び出してあなたの顔を平手打ちしました。我慢できなかった。それぞれの言語には最適なシナリオがあると信じており、技術的なことについて他の人とコミュニケーションをとることをとても楽しんでいます。
招待していただきありがとうございます。私の知る限り、上記のマルチスレッド PHP は swoole を使用して完成させることができます。それは不可能ではありません。
PHP の設計の最も優れた点の 1 つは、拡張メカニズムです。将来、Python に他の新しい機能や機能が追加されたとしても、C 言語を知っている PHP マスターは C を使用して PHP の拡張機能を作成することもできます。
つまり、どの言語にも独自の意味があるので、比較する時間があるなら、もう少しコードを書いたほうが良いでしょう。
Python はドル記号なしでコードを書くことができます。
PHPではできません。
ありがとう!二つの言語は異なる分野を横切って比較すると、必然的に無意味な論争につながります。
PHPという言語が誕生する前から、WEB界隈にはすでにレッドオーシャンが存在していたのですが、上記のPythonマスターの言うことに従えば、PHPが登場する必要はまったくありません。しかし、PHP が登場して成長を続け、現在では Web 開発市場の大部分を占めています。
あらゆるものの出現には必然性があり、将来のインターネット技術分野はますます急速に実装される傾向にあります。 Dz! の登場がなければ、ここ数年で中国で BBS がこれほど急速に発展することはなかったと思います。 PHP が中国および世界中のインターネットの発展に多大な貢献をしてきたことがわかります。
ザッカーバーグ氏がPHPを使ったことを後悔していると言っている人は多いですが、もしあの時彼がPHPを選んでいなかったら、FBが席巻することはなかったかもしれません。ビル・ゲイツが Windows オペレーティング システムを立ち上げたとき、それは実際には完璧ではありませんでした。ユーザーの習慣を早期に培うために、彼はむしろ不完全だと考えたソフトウェアを市場に投入したかったのです。発売前に完璧を追求したいのであれば、その時点で完璧だったとしても、あまり多くの人がそれを使用しないかもしれません。
公式には、このつかの間のビジネスチャンスが PHP の栄光を生み出しました。まず使いやすいアプリケーションを起動し、それから時間をかけて改善してください。 C を使用する場合でも、市場ではアプリケーションの実現可能性がすでに申請されているため、多くの支持が得られます。
では、PHPとPYを水平的に比較することはできません。PYにできてPHPにできないことについては、オーダーメイドのカスタマイズなど、すでに十分な時間と十分な実現可能性があるプロジェクトはPHPに適さないというのが私の答えです。
Phpではできないことがある、気になる!
実際、py にしかできて php にできないことは何もありません。
個人の好みは言語の選択において一定の役割を果たします。その時に選ばれた人がたまたま何か大きな影響力のある仕事をしていた場合、惰性が形成され、後になってその人を止めることができなくなります。
py のアプリケーションの大部分は数値計算であり、多くのライブラリがあります。以前にいくつかの理由を挙げた人もいます。数値計算に携わる人々が他の言語よりも Python を好む理由の 1 つは、その構文が科学者にとってより受け入れやすいということです。
したがって、php ではできないことが py でできると言わなければならないのであれば、py の構文は他の業界のユーザーにとってより魅力的である可能性があります。
Python が研究に適した 10 の理由 (そしてそうでない理由もいくつか)
参考用にリンクを貼っておきます。
質問が主観的すぎます
何が「できない」かを正確に定義してください
c/c++はWeb開発に使用でき、bashは科学技術計算も記述でき、node.jsさえも組み込み開発に拡張できます
相対と定性的に「やるのに向いていない」、「できない」はない
上記はPythonでできるけどPHPではできない?関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。