整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript与PHP到底有何不同?

51CTO.com快译】JavaScript与PHP,都是目前人气较高的两款编程语言。PHP是基于C语言而打造,因此非常适合有C语言基础的开发者。事实上,两种语言对于新手程序员来说都是比较容易上手的,而且它们都具备出色的灵活性与可扩展性。

那么,它们到底有何不同?

1.PHP能更轻松地实现定制化目标:

重构与定制化能力是决定编程语言命运的两大重要因素。PHP是开放源代码软件,意味开发者可以根据社区需求进行修改,而非立足单个开发者的需求,也正是它的开源特性使得PHP更为灵活也更加适用。凭借着这一点PHP能获得很多开发者的支持的原因之一。Comiconverse公司CEO透露称,“我们更乐于利用PHP开发网站,因为我们能够轻松做出自己需要的变更。JavaScript虽然也很实用,但开发者能够利用PHP更轻松地实现定制化目标。”

需要注意的是,PHP在这方面仅仅是略有优势。JavaScript同样可以根据实际需求进行重构与定制,只不过在效率上不及PHP。

2.各方面对比:

  • 上手难度:js完全oop相对PHP更容易理解一些,但是文档不如PHP完善,而且语言更新运营还解析引擎不是一家,没办法写清底层原理。那也是js上手简单一些,起码不用搭环境选版本

  • 特性:js是事件驱动的,很灵活但是也很坑,调试起来比较困难(曾经被吭哭),而PHP的特性就比较混乱了,组件很多。双方特性各有优点,PHP的引用传递,js的万物皆对象。平均水平js赢,整天实力PHP赢。

  • 功能:要说功能强大,很明显,js暂时还比不上PHP,而且客户端js被限制了很多,比如跨域,ajax写入,文件读取什么的。

  • 开发难度:其实都不难,但是PHP比较依赖文档还搜索引擎,因为命名问题很难记住,这一点js做的就比较好了,尤其是正则表达式部分。

  • 语义:个人比较看重的一点就是语言的语义性,这一点js的完全对象化占很大的优势,调用属性或方法.和[]语义性特别强,而PHP这方面就比较谨慎,限制的比较严格。但是js也有一个语义部分很糟糕的部分,就是下面这个

  • 注释:PHP有相当完善的注释系统,而且各个IDE支持的非常好,当PHP作为核心驱动的时候代码提示和注释非常给力。反观js大多以编辑器为主,作为驱动也是最近不久,所以注释方面不如PHP完善。


3.开发大型Web应用中,JavaScript有明显优势

两种语言都能用于开发大型Web应用,但JavaScript在这一领域拥有明显优势。如之前所提到,专用服务器能够更好地托管JavaScript用例,因此其更适合用于大型Web应用开发。


4.PHP是一种更为年轻的语言,因此传统企业更倾向于选择JavaScript。

如果是在小型企业工作的开发人员,他们通常会使用PHP。但如果在大型企业或者是传统企业,那么JavaScript会是系统与项目中的普及度更高的语言。PHP是一种更为年轻的语言,因此传统企业更倾向于选择JavaScript,以简化IT部门内部的管理工作。

同样需要强调的是,JavaScript是一种认证的付费语言。这意味着大家可以考取JavaScript相关资质认证,而PHP则不行。另外,如果学PHP,最后你还得学javascript,因为现在PHP 只会后端不会前端,很难找到工作。


5.不可一概而论

正如很多程序员所言,我们没办法将二者进行简单比较,因为它们的用途并不一样。PHP是一种服务器端脚本语言,而JavaScript则是一种面向桌面与服务器端的通用型语言。这意味着程序员能够利用JavaScript完成更为广泛的应用目标。


6.总结——应该如何选择?

选择哪款语言,取决于您的协作对象以及使用目的。在理想情况下,大家最好能同时掌握两者。如果非要选择其一,那么PHP应该能够凭借着开源特性、更多支持选项以及灵活的可塑性小幅胜出。

当然,这只是我的个人见解。您对此有何看法?请在评论中与我们分享。


原文链接:https://dzone.com/articles/javascript-vs-php-whats-the-difference

原文标题:JavaScript vs. PHP: What's the Difference?

原文作者:Carol Jon

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

者 | Brent

译者 | 张兰月

这篇文章不在于解决关于 PHP 的那个永恒话题,而是想让你了解,PHP 在这些年的进展以及那些值得关注的特性与发展现状。

之前,有一篇非常流行的博客文章是“PHP:那些糟糕的设计”,第一次读到这篇博客的时候,我正在一个非常破旧的地方工作,处理着许多 PHP 遗留项目。这篇博客对我触动很深,我开始思考是否要停止编程,换一份完全不同的工作。文章地址:

https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

幸运的是,很快我就换了一份工作,而 PHP 在 5.X 版本之后又有了很多新的改进。今天,我要向那些不再使用 PHP 编程,或者陷入遗留项目的人致敬。

剧透:直到今天,PHP 仍有很多糟糕的东西,例如许多核心功能仍然存在不一致的方法签名,仍然存在令人混淆的配置设置,仍然会有一些开发者因为知识的缺乏而导致写的代码很糟糕等等。

但是,本文我想把目光集中在 PHP 已经改进的地方上面,以及如何写出更加干净和易维护的 PHP 代码。也许你不会改变对 PHP 的看法,但很有可能,你会惊讶于过去几年 PHP 的进步。

要 点

  • PHP 每年都会推出一个新的版本;
  • 自 PHP 5 代之后,其性能不断提升;
  • 有框架、包和平台组成的活跃生态系统;
  • 过去几年间,PHP 添加了许多新的特性,且现在仍在持续演进;
  • 许多工具如静态分析器也越发成熟,未来也将继续发展。

更新:很多人希望我能够展示一下实际代码,这是我其中一个业余项目的源代码,它是用 PHP 和 Laravel 写的,另外还有一个是我们在办公室负责维护的上百个 OSS 包的列表。

  • https://github.com/brendt/aggregate.stitcher.io
  • https://spatie.be/open-source/packages

回顾历史

让我们先快速回顾一下 PHP 的版本发布周期。现在 PHP 的版本是 7.3,预计 2019 年末将发布 PHP 7.4,7.4 之后的版本将会是 PHP 8.0。

从 5.X 版本之后,PHP 核心团队一直在努力每年发布一个新版本,并且在过去的 4 年间,这一目标一直完成得很好。

大致来说,每个新版本都会用 2 年时间进行积极地支持,然后用一年进行“安全修补”工作。这样做的目的是促使 PHP 开发者尽可能保持最新状态,例如每年都升级比从 5.4 直接跳到 7.0 要简单得多。

PHP 具体的版本发布情况,可以查看:

https://www.php.net/supported-versions.php

搞清楚 PHP 的发展历程后,我们来谈谈大家对 PHP 的常见误解。

PHP 的性能

在 5.X 版本时代,PHP 的性能平均而言是最好的。而在 7.0 时代,大部分的 PHP 核心都从零开始重写了,其性能能够达到之前的 2-3 倍。口说无凭,幸运的是,有人花了大量时间来测量 PHP 的性能,Kinsta 提供了一个很好的更新列表。

从 7.0 版本以来,PHP 性能就只升不降。PHP web 应用的性能可以和其他语言 web 框架的性能相提并论,甚至更高。具体测试情况可查看:

https://github.com/the-benchmarker/web-frameworks

当然,PHP 框架的性能还无法超越 C 和 Rust,但是要比 Rails 或 Django 好,且能够和 ExpressJS 相媲美。

框架和生态系统

在谈到框架时,PHP 已经不再只是 WordPress 了。作为职业的 PHP 开发者,我认为,WordPress 无法从任何层面代表当今的生态系统。

总体来说,有 2 个主要的 web 应用框架以及一些相对而言较小的框架,如 Symfony 和 Laravel。除此之后,还有 Zend、Yii、Cake、 Code Igniter 等等。

如果你想了解现代 PHP 开发究竟是什么样子,那么就需要掌握 Symfony 和 Laravel 中的一个,这 2 个框架都有庞大的生态系统,包含各种包和产品。从管理面板和客户关系管理系统 (CRM) 到单独的包,从持续集成 (CI) 到性能监视工具,我们有无数的服务如 web 套接字服务器、队列管理器、支付集成等等。

但是,这些框架都是为实际开发而设计的。如果你需要纯粹的内容管理,WordPress 和 CraftCMS 是理想选择,而且它们还会不断优化。

衡量 PHP 生态系统目前状态的方法是看一看 Packagist,它是 PHP 主要的包仓库。在过去的时间里,它呈现出了指数式增长的态势,每天 2500 万左右的下载量,足以说明 PHP 生态系统已经不再是过去那种弱者了。

Packagist 网站上列出了过去的包和版本数量:


除了应用框架和内容管理系统 (CMS) 以外,我们还发现,在过去几年,异步框架也崛起了。

异步框架是指用 PHP 或其它语言编写的框架和服务器,它们能够让用户运行真正异步的 PHP。异步框架的例子包括:Swoole、Amp 和 ReactPHP。

由于我们已经进入异步领域,具有大量 IO 的 web 套接字和应用等东西在 PHP 世界中就变得非常重要。

另外,人们还谈到了内部邮件列表,在邮件列表中,PHP 核心开发者讨论了 PHP 语言的进一步发展,例如增加 libuv 到核心之中。对于不熟悉 libuv 的人来说,libuv 同 Node.js 用于实现其所有异步性的库一模一样。

语言本身

尽管异步 (async) 和等待 (await) 还未面市,但 PHP 在过去几年已经经过了许多改进,下面便是 PHP 新特性的不完全列表:

  • 短闭包
  • https://stitcher.io/blog/short-closures-in-php
  • 空合并运算符
  • https://stitcher.io/blog/shorthand-comparisons-in-php#null-coalescing-operator
  • Traits
  • https://www.php.net/manual/en/language.oop5.traits.php
  • 属性类型
  • https://stitcher.io/blog/new-in-php-74#typed-properties-rfc
  • 扩散运算符
  • https://wiki.php.net/rfc/argument_unpacking
  • JIT 编译器
  • https://wiki.php.net/rfc/jit
  • FFI
  • https://wiki.php.net/rfc/ffi
  • 匿名类
  • https://www.php.net/manual/en/language.oop5.anonymous.php
  • 声明返回类型
  • https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration
  • 现代密码学
  • https://wiki.php.net/rfc/libsodium
  • Generators
  • https://wiki.php.net/rfc/generators
  • 其他
  • https://www.php.net/ChangeLog-7.php

尽管我们的主题是 PHP 的语言特性,但我还是觉得需要谈一下 PHP 语言的开发流程。虽然社区被允许提出 RFC,但仍有一个活跃的志愿者核心团队在推动 PHP 的发展。在添加一个新的语言特性之前,必须要进行投票。只有获得 2/3 多数选票的 RFC 才能被添加到核心中。

大约有 100 个人可以投票,但你不需要给每个 RFC 投票。核心团队的成员毋庸置疑能够投票,因为他们必须维护代码库。除了他们以外,还有一群人是单独从 PHP 社区中挑选出来的,这些人员包括 PHP 文件的维护人员,PHP 整体项目的贡献者,以及 PHP 社区中颇具威望的开发者。

虽然大多数核心开发是由志愿者组成的,但其中一名核心 PHP 开发者 Nikita Popov 近期被 JetBrains 雇佣,并全职负责该语言的开发。另外一个例子是 Linux 基金会决定投资 Zend 框架。上述这些雇佣和收购行为确保了未来 PHP 开发的稳定性。

工 具

除了核心本身,我们还目睹了过去几年间工具的增长。首先进入我脑海的是静态分析器如 Vimeo 发明的 Psalm,以及 Phan 和 PHPStan。

这些工具能够静态分析 PHP 代码,并且报告打字错误、可能的 bug 等等。在某些方面,它们提供的功能足以和 TypeScript 相媲美,但目前 PHP 还没有被转编译 (transpile),因此它并不支持定制句法。

虽然这意味着我们必须依赖于文档块,但 PHP 的最初发明者 Rasmus Lerdorf 提出了将静态分析引擎添加到核心之中的想法。这个想法潜力巨大,但任务量着实不小。

提到转编译,由于受到 JavaScript 社区的启发,有许多人试图将 PHP 句法延伸到用户空间中。一个名叫 Pre 的项目就做了这件事情:它支持新的已经转编译为普通 PHP 代码的 PHP 句法。

虽然这一想法已经在 JavaScript 中得以实现,但只有在提供了适当的集成开发环境 (IDE) 和静态分析支持后,它才能在 PHP 工作。这一想法非常有趣,但还必须不断完善,才能变成“主流”。

结束语

尽管 PHP 还有很多缺点和遗留问题,但我可以充满信心地说,我喜欢使用它。就我的经验来看,它可以创建可靠、可维护和高质量的软件。如果使用得当,PHP 对于 web 开发来说是个非常棒的选择。

英文原文

https://stitcher.io/blog/php-in-2019


彩蛋一

新浪微博是国内使用 PHP 语言的代表之一,前新浪微博首席架构师惠新宸就是 PHP 开发组的核心成员。2016 年,InfoQ 编辑约稿了新浪微博,分享了新浪微博的 PHP 7 升级实践以及选型思路。文章年代虽然较为久远了,但背后的思路和实践细节依旧值得参考,感兴趣的同学可以在 InfoQ 公众号对话框回复关键词:PHP,获取文章详情。

请在 InfoQ 公众号对话框回复关键词,留言区回复无法接收的哟!

彩蛋二

QCon 全球软件开发大会广州站正在火热进行中,我们为 InfoQ 的读者汇总了大会 PPT,回复关键词:PPT,即可下载!

多数PHP程序都使用HTML表单从用户那里获取数据并计算结果。

HTML表单的一些基本原则

  • 选择适合于收集的数据类型和提供交互方式的控件。
  • 清楚标记每一个控件,这样用户就可以理解其功能。
  • 尽可能将标签对齐。将控件的左边缘对齐。
  • 将相关的标签分组,并且通过设计中使用空白将每一个分组分开。
  • 表单上的控件顺序应该类似于用户操作他们的顺序。

创建基本HTML表单

首先创造一个基本的HTML大纲,包含表单控件;然后将控件进行合并(HTML表单必须包括一个提交按钮,用户单击它可以将表单数据发送到服务器。)一个单独的HTML页面可以包含多个表单。

  • 创建HTML结构

包含表单的HTML结构和和普通的HTML结构一样。

<HTML>
  <HEAD>
  <TITLE>标题放在这</TITLE>
  </HEAD>
<BODY>
  表单页面放在这
  </BODY>
  </HTML>

在包含表单的HTML页面中可以使用任何HTML标签。基本的表单使用FROM标签来说明。该标签中METHOD属性接收GET或POST两个值中的一个。ACTION属性子明PHP脚本的url,该脚本可以收集通过表单收集的数据,可以是绝对路径或者相对路径

<FORM METHOD="method" ACTION="url"> 
  中间可以放置表单控件
  </FORM>
  • 合并控件

两个常用的基本控件:文本框和提交按钮。

文本框:允许用户键入信息以发送给PHP脚本。NAME属性为文本提供名称,PHP脚本可以通过名称准确访问其内容,因此它应该是唯一的且符合PHP变量命名规则(但不需要$符号),单标签。VALUE属性指明出现在提交按钮上面的标题。创建方式如下:

<INPUT TYPE = "TEXT" NAME="text">

提交按钮:允许用户将一个表单的内容发送到服务器,一个HTML表单对应应该有一个提交按钮。

示例:一个完整的HTML表单。

<HTML>
  <HEAD>
  <TITLE>标题</TITLE>
  </HEAD>
<BODY>
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
</FORM>
  </BODY>
  </HTML>


  • 使用多个表单

可以在一个HTML页面中包含多个表单,注意下一个表单的FORM开始之前需要结束前一个FORM表单。

<HTML>
  <HEAD>
  <TITLE>标题</TITLE>
  </HEAD>
<BODY>
  
<FORM METHOD="POST" ACTION="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data">
<BR/>
<BR/>
</FORM>

<FORM METHOD="POST" NAME="phpinfo.php">
<INPUT TYPE="TEXT" NAME="user_name1">
<BR/>
<BR/>
<INPUT TYPE="TEXT" NAME="user_email1">
<BR/>
<BR/>
<INPUT TYPE="SUBMIT" VALUE="Send the Data1">
</FORM>

  </BODY>
  </HTML>


创建表单控件

  • 创建自定义的文本框

文本框的属性中,TYPE和NAME是必须的,其余是可选属性。SIZE属性用于设置文本框的可视大小;MAXLENGTH指明用户键入字符的最大长度;VALUE给出了一个最初显示在文本框中的值。

<input type="text" name="" size="" maxlength="" value="">
  • 创建文本区域

文本区域可以输入多行文本。NAME和ROWS属性是必须的。ROWS属性表明了文本区域内可以看到的文本行数,充满时会滚动。COLS属性指明可见文本列数与行数类似。WRAP属性指明文本区域内单词换行的方式,可以指定如下值。该标签为双标签。

说明

off

禁止单词换行但用户可以输入换行符强制换行

virtual/soft

各行显示为换行,但是换行并没有被发送到服务器

physica/hard

启用了单词换行

<inputarea name="" rows="" cols="" wrap="">
  • 创建密码框

创建密码框的语法与文本框相同,但要将TYPE属性指定为PASSWORD而不是TYPE。

<input type="password" name="" size="" maxlength="" value="">
  • 创建复选框

取两个值中的一个,即二选一。TYPE属性是必须的,checked属性出现,该复选框默认情况会被选定。value属性指定复选框被选定情况下被发送到服务器的值,默认发送on值。法如下:

<input type="checkbox" name="" checked value="">
  • 创建单选按钮

语法与复选框属性含义相同,但是TYPE属性的值必须是RADIO,NAME属性是必须的。

<input type="radio" name="" checked value="">
  • 创建列表框

用户可以选择一个或者多个选项,它是一个滚动菜单。

<select name="" multipile size="">options go here</select>

name属性是必须的,multipile属性指明用户可以通过按下crtl键并单击多个选项来选择它们

列表框的单选行为可作为单选按钮。

<option selected value="text"></options>
  • 创建隐藏域
<input type="hidden" name="text"value="">
  • 实现上传文件的HTML表单
<input type="FILE" name="name" accept="time" value="text">

其中type属性是必须的。格式通过使用MIME码指定。常用的格式如下:


超文本标记语言文本 .html,.html text/html

  普通文本 :txt text/plain

  word文档:application/msword

  RTF文本 :rtf application/rtf

  GIF图形 :gif image/gif

  JPEG图形 :jpeg,

  jpg: image/jpeg

  au声音文件:au audio/basic

  MIDI音乐文件 :mid,.midi audio/midi,audio/x-midi

  RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio

  MPEG文件 .mpg,.mpeg video/mpeg

  AVI文件 .avi video/x-msvideo

  GZIP文件 .gz application/x-gzip

  压缩文件.rar application/octet-stream

  压缩文件.zip application/x-zip-compressed

  TAR文件 .tar application/x-tar


更多提交表单的信息

  • 使用图像提交数据
<input type="image" src="url" name="text" align="align">
  • 创建重置按钮
<input type="reset" value="text">