我正在读一本 文章/采访(语言战争:PHP 对比红宝石 (作者:杰弗里·韦;2011 年 3 月)) 由 Envato 开发人员使用 Ruby 开发。他说,“PHP 是一个伪装成语言的 Web 框架。”

他没有详细解释这一说法,所以这让我想知道这是否属实,如果是,又如何。我做了一些研究,但无法找到有关该主题的任何信息。我想知道这个说法是如何正确的以及是什么使得 PHP 不是一种编程语言。为什么其他语言(例如 python 或 ruby​​)不属于该类别?

有帮助吗?

解决方案

正式:

PHP 是一种广泛使用的通用脚本语言,特别适合 Web 开发,并且可以嵌入到 HTML 中。

根据 http://us.php.net/

但这不一定是一个非常恰当的描述。

PHP 是一种图灵完备的计算机语言。然而,任何 PHP 发行版都会附带一个 巨大的 标准库的数量如此之多,以至于标准 PHP 库可以归类为框架。

因此,从这个角度来看,PHP 要么是:

拥有自己独特的图灵完备脚本语言的框架。

或者

一种包裹在庞大网络框架中的语言,无法从中删除。

但是,如果我们看一下名称“PHP:超文本预处理器”(PHP),这意味着 PHP 是一个“预处理器”(预处理超文本)——既不是一个框架,也不是一种语言,而是一个软件。

从这个角度来看,PHP 是一个以专有语言运行脚本的应用程序,可以访问旨在处理超文本的大型内部框架。

所以:PHP 不能被正确地归类为框架或语言。事实是,有一种语言、一个框架和一个应用程序,它们都具有相同的名称(因为它们都被整合为一个东西)!因此“PHP”可以指代系统的任何部分。

其他提示

我没有消息来源——但这个声明有一定道理,即使它可能只是试图引发争议。

PHP 绝对是一种语言,而不是框架 - 但如果您查看 PHP 手册与 C 或 C++ 规范,PHP 提供的功能主体包含在框架领域中考虑的元素:PDO、XML 处理等等——这些东西通常包含在像 Qt 这样的框架中。

PHP 的特点是它不仅仅是一种编程语言,而且是一个完整的生态系统,包括:

  • PHP 编程语言本身
  • 可以连接到 Web 服务器的运行时(通过 mod_php 或 CGI/FastCGI),并提供了很多与之交互的方式
  • 一个大型的内置函数和类库,其中许多与网络相关

PHP 语言本身提供了专门针对 Web 编程的功能,例如超全局变量 ($_SERVER, $_GET, $_POST, $_COOKIE, 等),使用在 PHP 模式和 HTML 模式之间跳转 <?php ?> 标签等,其语义是围绕每个请求一个进程的执行模型构建的,这是服务器端 Web 编程早期的规范。PHP 最初是一种 Web 脚本工具,后来才演变成一种(某种程度上)通用的编程语言;CLI 版本和其他非 Web 功能虽然通​​常可以非常有效地使用,但却是事后才想到的,并且在充分接触该语言及其生态系统后,有时这可能会变得非常明显。

相比之下,大多数其他编程语言从一开始就被设计为通用、系统或应用程序编程语言,并且任何特定于 Web 编程的内容都来自库。如果你想用 Python 进行 Web 编程,你需要一个 Web 框架,或者至少需要一个库来实现 Web 服务器绑定以及请求解析、HTML 模板和会话管理等功能,可能还需要一些数据库绑定(除非你真的很硬核,所有这些都是从头开始写的)。

PHP 默认内置了所有这些东西,这就是为什么人们喜欢说 PHP 本身就是一个 Web 框架。

对于“你好,世界!” Python中的Web应用程序,您通常会设置一个Virtualenv,安装一些库,为Web框架设置一些样板,定义路由,并编写一个使用“ Hello,World!”生成响应的处理程序,在身体里;在 PHP 中,这是一个编写问题 <?php echo "Hello, world!" 在index.php中,将其复制到apache的docroot,并启用mod_php。其余的(连接到服务器、解析请求、生成响应等)仍然会发生,但 PHP 会为您处理好。

PHP 不是一种网络语言。它具有在 Web 应用程序中进行编程的内置功能。与 java、ASP、C# 等其他语言相比,用 PHP 开发 Web 应用程序非常容易。

如果您想开发一个不太大的Web应用程序并且使用较小的数据库(几GB),那么您可以开发PHP Web应用程序。有许多网络托管公司提供基于 PHP 的网络托管,其所有功能的价格都非常低。与 Java/ASP 相比,维护 PHP 网站的成本较低。PHP 是轻量级 Web 应用程序。

瑞安可能是从历史角度形成他的观点的。从历史上看,PHP 本来是一种网络语言。从历史上看,该语言的许多功能都是针对此用例而设计的,事实上 PHP 曾经代表“个人主页”。 http://www.nusphere.com/php/php_history.htm

但现在,PHP 已经发展了很多,我个人认为这不再是事实了。

仅举2个例子:

线程最近才被添加到该语言中。很长一段时间,这是不可能的。线程在 Web 环境中没有意义(相反,您倾向于启动一个全新的后台进程或通过队列将消息传递给其他地方的工作人员)。 http://uk3.php.net/manual/en/book.pthreads.php

内存和资源管理。PHP 为对象提供了 __destruct() 方法,因此您可以清理资源。但首先,这仅在脚本关闭时调用。现在,在 Web 环境中,这是有意义的,因为您只希望脚本最多运行 0.5 秒,因此脚本关闭永远不会太远。但对于长时间运行的后台或 shell 脚本来说,这很糟糕。PHP 的更高版本修复了这个问题。 http://php.net/manual/en/language.oop5.decon.php

然而,您通常仍然会发现 PHP 在 Web 和服务器上下文中使用,而不是在桌面应用程序上下文中使用 - 所以这是很多焦点所在。

许可以下: CC-BY-SA归因
scroll top