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 和 Laravel 写的,另外还有一个是我们在办公室负责维护的上百个 OSS 包的列表。
让我们先快速回顾一下 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 的常见误解。
在 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 新特性的不完全列表:
尽管我们的主题是 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>
<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="">
<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">
*请认真填写需求信息,我们会在24小时内与您取得联系。