検索
ホームページバックエンド開発PHPチュートリアルJavaScript と PHP のどちらのプログラミング言語が設計が優れている (劣っている) でしょうか?

私は長い間 JavaScript を断続的に学習していましたが、その時の苦痛は薄れ、今は PHP を学習しています (本を読むのではなく、Web ページを読む + 練習する) が、PHP は特に使いにくいと感じています。 JavaScript も PHP も設計が悪い言語として評価されていたことを思い出し、この問題を考えてみました。

返信内容:

まず最初に宣言しておきます。私は PHP を 2 年間書いてきましたが、構文にはかなり慣れています (複雑すぎて覚えるのが難しいため)。私は PHP のシンプルさと人気を高く評価しており、PHP のさまざまなフレームワークが好きですが、PHP の構文はあまり好きではありません。

=============

個人的には、js の構文とコア API を好みます。変数の名前付けにお金をかける必要はありません。 . 関数は最初のタイプで、API は覚えやすく、最も重要なのは仕様とゲーム ルールがあることです。

もちろん、js にも欠点はあります。コールバック地獄が少し悪い、イテレータの導入が少し遅い、クラス構文が十分に甘くない、などです。いくつかの点では PHP と同じくらい使いやすいですが、すべて問題ありません。すべてゆっくり修正できます。

==================================

PHP はstart :

変数名の制限により、PHP を見るとすぐにキーボードについて苦痛を感じます。

変数名は大文字と小文字を区別しませんか、それとも関数名は大文字と小文字を区別しませんか?

コア API の命名はさらに悪く、PHP を書いた 2 年間は PHP 本を持ち歩いていました。 手動では、最も一般的に使用される文字列処理方法でさえ、熟練のレベルに達することができません。アンダースコアの名前付けを使用するべきか、キャメルケースの名前付けを使用するべきか、それともすべて小文字の名前を使用すべきか、それとも手続き型 API を使用すべきか、それとも oop スタイルを使用すべきか、常に考えています。 API;

ラムダを導入する前は、PHP は単純な string.replace(regex, fn) でさえも苦労しましたが、その結果、文字列を使用して関数を作成していました。または、関数名を文字列に書き込んで渡すのは非常に面倒です。

新しく導入された匿名関数は、パフォーマンスと使用法が従来の名前付き関数とは大きく異なります。

スコープがありません。チェーン、不正なグローバル、面倒なクロージャーの使用、すべてが排泄物にパッチを当てようとしているようなもので、とても醜いです。

==================================

私はよく知っていますPHP の構文と API の見解では、そのような分厚いパッチを適用する代わりに、最初からやり直してはどうでしょうか?しかし、それでも PHP と呼べるのでしょうか? 。 JS と PHP にはどちらも設計上の間違いがたくさんあります。

違いは、JS の進化によって古い落とし穴が埋められ、新しい落とし穴がほとんどなくなったことです。 PHP はすべてのバージョンで落とし穴を埋めていますが、常に不完全であり、新たな落とし穴が発生します。


【補足】
元の設計を見ても、PHPよりもJSの方が確実に優れています。ブレンデン・アイヒ氏は設計と実装にわずか 10 日しかかかりませんでしたが、それでもラスムスよりもはるかに高かったです。ラスムス自身は、これはただの遊びのためであり、デザイン言語のためではまったくなかったと述べた。
言語の特徴について少しだけ。 JS にはクロージャがあり、大きな欠点がたくさんある場合でも、多くの優れたライブラリやフレームワークを作成するのに十分なサポートを提供します。 PHPはこれまでクロージャを追加してきましたが、使いにくいのと同じくらい役に立ちません。

【追加】
@鲁小夫がコメントで PHP の大文字と小文字の規則について不満を述べました。「php は Unix スタイルに従っています。つまり、変数は大文字と小文字が区別されますが、関数は大文字と小文字が区別されません。センシティブ。" "。この「UNIX スタイル」については聞いたことがありません。
PHP の大文字化ルールの起源については、私が書いたこの記事を参照してください: なぜ PHP の大文字化ルールは非常に不規則なのでしょうか? · 問題 #29 · hax/hax.github.com · GitHub あなたは言語の落とし穴を気にする必要があるほど進化しましたか?構文が違うだけじゃないの? PHP の元のバージョンはテンプレート言語でした。 。 。 おそらく、ニーズは時代によって異なります。PHP の本来の目的は、動的な Web ページを迅速に作成するための言語を作成することでした。PHP では、文字列を記述するのではなく、コードを HTML に初めて埋め込みました。 PHP の創設者は当時頭を悩ませたかもしれませんが、今日の人々が MVC を普及し、ビュー コードとロジック コードの分離に忙しくなるとは予想していませんでした。 PHP のコンセプトは当時、動的な Web ページを作成する技術として非常に成功していたので、すぐにヒットしました。 PHP 自体は動的な Web ページのために生まれたものであると同時に、多くの点で他の言語とは異なる可能性があるため、PHP はすべてのバージョンで主流の汎用言語に発展しようとしています。よく言えば「成長」ですが、悪く言えば「穴を埋める」と言えば聞こえはいいのですが。 1 つは個人ホーム ページ (最新の再帰的略語でも単に PHP: ハイパーテキスト プリプロセッサ です。
もう 1 つは Javaスクリプト です。
から)

JS がユニバーサル中間言語になった今でも、PHP は Web しか実行できません。

実際、Brendan Eich はそれを実装しています。 JS の最初のバージョンでは検討されていましたが、PHP については、バージョン番号のアップグレードとパッチ適用以外に何も検討されていませんでした。

もちろん、Hack/HHVM は後継です。 PHP コミュニティの顔を叩きましたが、プロモーションがなければ役に立ちません
さて、PHP を見ると、必要なものがすべて揃っており (ジェネリックや ADT も追加された)、ハイエンド プログラミングのように見えます。

JavaScript を見てみると、それは Andres Hejlsberg と Erich Gamma の手によって作られたものです。

車輪の再発明に関して言えば、PHP 6 や ECMAScript 4 について聞いたことはありませんか? これはjsがハッキングされた最悪の時期です 構文的に言えば、特に JSON の導入後は JavaScript が勝ちます。
C や Java に近いという観点から見ると、PHP の方がとっつきやすいです。

さまざまなライブラリを除けば、
JavaScript は非常に合理化されており、組み込みオブジェクトはわずかですが、ほとんどのプログラミング ニーズを満たすことができます。
PHP は、さまざまな組み込み関数や一貫性のない名前があり、肥大化しているように見えます。 PHP は世界で最高の言語です。 私は熱心な PHP ハッカーですが、あなたのハッキングには意味がありません。PHP を学んだ直後は使いにくいことをご存知ですか?使いにくい点を教えてください。
学習するときに先入観を持っていませんか? PHP の唯一の利点は、すぐに学習できることです (またハックしました)
言語は理解できないほど複雑ですか?
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター