介绍一些编程语言— PHP语言

介绍一些编程语言— PHP语言

PHP 语言

简介

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中。PHP 语法学习了 C 语言,吸纳 Java 和 Perl 多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如 Java 的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的 web 网站。PHP 同时支持面向对象和面向过程的开发,使用上非常灵活。

发展历程

PHP 是一个拥有众多开发者的开源软件项目,最开始是 Personal Home Page 的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”。PHP是在 1994 1994 1994 年由 Rasmus Lerdorf 创建的,最初只是一个简单的用 Perl 语言编写的统计他自己网站访问者数量的程序。后来重新用 C 语言编写,同时可以访问数据库, 1995 1995 1995 年,PHP(Personal Home Page Tools)对外发表第一个版本 PHP1。此后,越来越多的网站开始使用 PHP,并且强烈要求增加一些特性,如循环语句和数组变量等, 1995 1995 1995 年发布的 PHP2 加入了对 mySQL 的支持

Andi Gutmans 和 Zeev Suraski 在为一所大学的项目中开发电子商务程序时发现 PHP2 功能明显不足,于是他们重写了代码发布了 PHP3。PHP3 是类似于现代 PHP 语法结构的第一个版本,PHP3 的最强大的功能是它的可扩展性,PHP3 的新功能和广泛的第三方数据库、API 的支持使得这样程序的编写成为可能。

PHP3 官方发布不久,Andi Gutmans 和 Zeev Suraski 开始重新编写PHP代码。设计目标是增强复杂程序运行时的性能和PHP自身代码的模块性。经过不懈努力Zend引擎研发成功并且实现了设计目标,并在 1999 1999 1999 年中期引入 PHP。基于该引擎并结合了更多新功能的 PHP4 于 2000 2000 2000 5 5 5 月正式发布。除了更高的性能以外,PHP4还包含一些关键功能,比如:支持更多的 web 服务器、HTTP Sessions 支持、输出缓冲、更安全的用户输入和一些新的语言结构。

PHP5 于 2004 2004 2004 7 7 7 月正式发布,它的核心是 Zend 引擎 2 2 2 代(PHP7 是 Zend 加强版 3 代),引入了新的对象模型和大量新功能开始支持面向对象编程。随着 PHP6 经历长时间的开发流产后,PHP5 发布了 6 6 6 个版本顽强的支撑着开源社区的发展,直到 2015-12-03 那天迎来了 PHP 7.0 的发布,其实 PHP5.6 已经包含了很多 PHP6 想实现的特性,它为 PHP7 的研发争取了宝贵的时间。不负众望 PHP7.0 对比 PHP5.6 性能整整提升了 2 2 2 倍,PHP7 的成功发布让很多核心开发成员回归到PHP社区,并且在 2020-11-26 发布了 PHP8。和 php7 系列相对比,PHP8 对各种变量判断和运算采用更严格的验证判断模式,这点有利后续版本对 jit 的性能优化。

PHP 语言作为一种高级语言,其特点是开源,在设计体系上属于 C 语言体系,它可以让很多接受过高等教育的初学者能很快接受并完成入门学习,简单好上手容易找工作自然粉丝多。如果数据量大及访问压力大,可以集成 redis、mysql 分表分区分库、elasticsearch 搜索引擎、消息队列写保护和 PHP 系统分布式集群部署等技术方案,缓解数据存储、服务访问和数据检索带来的巨大压力。

无论是大中小型项目,PHP 都是一个十分适合的高级编程语言,是否适合就看项目研发团队的对它的掌握程度。 但是对于较大的和更为复杂的项目,最常见的 php-fpm 编程模式就显出它的薄弱了。针对 PHP-fpm 暴露出的一系列缺点问题,最简单靠谱的方案就是及时升级兼容 PHP 的高版本,PHP7.0.0 对比 PHP5.6 性能提升了 2 2 2 倍,另外 PHP7.4 提供的 Preloading 预加载机制实现了部分程序常驻内存,获取了不错的性能提升,在 PHP8 又提供了高效的 JIT(Just-In-Time即时编译)运算支持。另外水平更高的开发者可以转向难度更高的 php-cli 编程,它能解决大部分的系统性能问题,无论是 PHP7 和 PHP8 都支持这种模式的编程。

经过二十多年的发展,随着 php-cli 相关组件的快速发展和完善,PHP 已经可以应用在 TCP/UDP 服务、高性能 Web、WebSocket 服务、物联网、实时通讯、游戏、微服务等非 Web 领域的系统研发。

根据 W3Techs2019 年 12 月 6 号发布的统计数据,PHP 在 WEB 网站服务器端使用的编程语言所占份额高达 78.9 % 78.9\% 78.9%。在内容管理系统的网站中,有 58.7 % 58.7\% 58.7% 的网站使用 WordPress(PHP 开发的 CMS 系统),这占所有网站的 25.0 % 25.0\% 25.0%

语言特点

开源免费

PHP 是一个受众大并且拥有众多开发者的开源软件项目,Linux + Nginx + Mysql + PHP 是它的经典安装部署方式,相关的软件全部都是开源免费的,所以使用 PHP 可以节约大量的正版授权费用。不过 PHP 作为一个开源软件,它缺乏大型科技公司的支持背景,网络上对它的唱衰也是经久不衰,不过它的持续迭代和性能持续增强的现实却是鼓舞人心的,PHP 社区用实际行动给予各种质疑强有力的回击。

快捷高效

PHP 的内核是 C 语言编写的基础好效率高,可以用C语言开发高性能的扩展组件;PHP 的核心包含了数量超过 1000 1000 1000 的内置函数,功能应有尽有很全面,开箱即用程序代码简洁;PHP 数组支持动态扩容,支持以数字、字符串或者混合键名的关联数组,能大幅提高开发效率;PHP 是一门弱类型语言,程序编译通过率高,相对其他强类型语言开发效率快;PHP 天然热部署,在php-fpm运行模式下代码文件覆盖即完成热部署;PHP 经过 20 20 20 多年的发展,在互联网上可以搜到海量的参考资料供参考学习。

性能提升

PHP 版本越高它的整体性能越高,根据官方介绍,PHP7.0.0 对比 PHP5.6 性能就提升了 2 2 2 倍,PHP7.4 已经比 PHP7.0 快了约 30 % 30\% 30%,PHP8.0 在性能上又相对 PHP7.4 大约改进了 10 % 10\% 10%。PHP 8.0 引入了 JIT 编译器特性,同时加入多种新的语言功能,例如命名参数、联合类型、注解、Constructor Property Promotion、match 表达式、nullsafe 运算符以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持 5 5 5 年发布一个大版本、 1 1 1 个月发布 2 2 2 个小版本的频率,最新的版本是PHP8.08。PHP 7.0.0 发布于 2015-12-03,此版本下最新版本是 PHP 7.4.21(发布日期:2021-07-01),PHP 8.0.0 发布于 2020-11-26,此版本下最新版本是 PHP 8.0.8(发布日期:2021-07-01)。

跨平台

每个平台都有对应的 php 解释器版本,指针对不同平台均编译出目标平台的二进制码(PHP解释器),php 开发的程序可以不经修改运行在 windows、linux、unix 等多个操作系统上。

常驻内存

php-cli 模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存实现资源复用,比较常用的做法是结合 swoole 组件编写 cli 框架。

页面生命周期

在 php-fpm 模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空,对程序员水平要求低,占用内存非常少,特别适合中小型系统的开发

运行机制

PHP 常见的运行模式有 2 2 2 种,分别是 php-fpm 和 php-cli。当 PHP 选择运行在 php-fpm 模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空。运行在 php-cli 模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存实现资源复用,性能可以得到很大的提升,php-cli 虽然开发比较复杂,但是能够获取更高的性能,对开发者的要求比较高需要比较高的开发水平,比较常用的模式是结合 swoole 组件编写 cli 框架,各种变量能保存在跨进程的高性能共享内存 Table,可以开发出支持热启动的 php-cli 可靠各类应用系统。

php-fpm 在 PHP 5.3.3 版本成为了官方正式组件,它提供了稳定可靠的进程管理服务,进程不足时候可以智能扩充数量,闲置时候可以自动回收销毁多余的进程,同时它对程序的容错能力很强大运行非常稳定,可以应付企业级的开发需求。php-fpm 友好的完成了使用 HTTP/HTTPS 等 TCP/IP 互联网协议下进行的用户的输入输出,页面级生命周期各种资源用完即释放,不存在内存泄漏的问题。php-fpm 也提供有一些常驻内存的技术支持,例如 PHP 7.4 引入的 opcache.preload 也能实现局部的 PHP 类和函数的常驻内存,不过这个方法不够灵活,和服务器配置捆绑的太死了。

php-cli 因为能实现各类资源的常驻内存,所以可以资源复用,更高效完成多进程编程和异步编程,可以开发出负载能力更高的应用系统。但是相对 php-fpm 的简单编程开发,开发者要注意很多的事项和需要做很多附加的控制器开发,否则就无法实现期待中的高性能。

首先开发者需要去实现可靠的进程管理服务,保证系统进程遇到各类错误退出运行后能够自动创建新的进程,只有这样才能保证后续的服务请求有足够空闲进程可分配。每个业务代码段都要做异常处理,让进程遇到非致命错误时候不会退出,因为进程重启意味程序和各类资源需要再次加载,这个过程性能消耗不小,所以只有进程稳定运行了常驻内存才有意义。

其次因为常驻内存,编写的新的程序必须重启服务才能生效,这一点习惯了 fpm 模式的开发者会感到比较陌生。另外开发者需要手工释放内存,否则系统长时间运行后会出现内存泄露。同时在cli模式下,我们不能像 fpm 里直接用 $_SERVER$_POST$_GET$_COOKI$_FILES 进行编程工作,需要自己去解析各种互联网通讯协议完成用户的输入输出。要实现多进程编程利用多核CPU计算,还有学习使用pcntl和posix编程,这里涉及到了异步编程逻辑,这块难度还是比较大的。比较常用的模式是结合 swoole 组件编写 cli 框架。

PHP 是一个活跃的社区开发语言,有专业的核心开发团队在持续不断的迭代,最近一个版本就是 PHP 8.0.8 引入了很多的新特性。

主要特性

  1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。

  2. PHP 可以比 CGI 或者 Perl 更快速的执行动态网页——动态页面方面,与其他的编程语言相比,

PHP 是将程序嵌入到 HTML 文档中去执行,执行效率比完全生成 htmL 标记的 CGI 要高许多;

PHP具有非常强大的功能,所有的 CGI 的功能 PHP 都能实现。

  1. PHP支持几乎所有流行的数据库以及操作系统。

  2. 最重要的是 PHP 可以用 C、C++ 进行程序的扩展!

简单程序

A + B problem


$input = trim(file_get_contents("php://stdin"));
list($a, $b) = explode(' ', $input);
echo $a + $b;

Hello World


 
echo "Hello World!\n" ;
 
?>

cookie

<html>
<head>
<meta charset="utf-8">
<title> </title>
</head>
<body>

<?php
if (isset($_COOKIE["user"]))
    echo "欢迎 " . $_COOKIE["user"] . "!
"
; else echo "普通访客!
"
; ?> </body> </html>

你可能感兴趣的:(编程语言介绍,php,开发语言)