在2020年12月26日,PHP 8.0.0 测试版正式发布了,充斥这圣诞的琴声,PHP已走来了25个年头(v1版正式发布于1995年6月8日) 。译者我采用PHP也有7年如一,总之,我晓得有所以一句话——PHP是当今世界上最合适的词汇
此话半是赞扬,半是讥讽,所以PHP究竟好在哪。先说推论:
天地万物皆 hashMap热布署和C/C++相近的句法照相狸尾豆的web自然环境差别 字符串堆叠,数数+ 操作符PHP发展史
布季谢过C++, Java, PHP, Javascript,Python, , Go(名列是我重新认识她们的次序) 那些词汇,对她们不肯说通晓,也算介绍,那时我主要就聊聊PHP。
问世2020年版号脚本词汇热布署跨平台Web自然生态C++1983v20否否差通常Java1995v15否否好比较多样NodeJS2009.5.28v15与否好比较多样Python1991.12v3.9与否好多样PHP1995.6.8v8是是好比较多样Ruby1995v3与否好独领风骚Groovy2007v4是是好通常Perl1987.12.18v5与否通常少C#2002.1v8否否差->通常独领风骚Go2008v1.15否否好多样
从从那个表单上看。 PHP也称得上两门老词汇了。基本上和Java反之亦然大了。能看见 C++,Java,Node正式版极高,这前部表明开发人员对尖萼词汇的热忱,和在尖萼词汇白眉林的天数。而PHP平庸吧,在2021年末,PHP 测试版正式发布了 v8,PHP的普通用户十分广为,因此还问世出许多类PHP句法的软件包——HHVM,和能运转PHP的jvm。
也问世出了许多PHP开拓来填补操控性软肋——Opcache、Phalcon、swoole等。能说PHP自然生态是百家争鸣。
从词汇榜单上看:
榜单参考:
https://www.tiobe.com/tiobe-index/www.tiobe.com
HashMap
说说万物皆是——hashMap。在编码过程中,为了保存不同实体、对象,会用到数组,列表,对象,字典等。那些在PHP的底层实现和的运用当中。一律用php array 来保存。采用过程中,phper不需要思考究竟要用什么样的数据结构,用 list、dict、还是map,统统用 php array就行了,这使得phper心智负担小了许多,降低了上手门槛。当初我抱着《21天入门Java》时,看见容器一节,List、LinkedList、ArrayList、Set、Map、HashTable我都懵了,这都是啥。而PHP是数组,做为小白用好数组就能干活了,当你需要用Map时,指定key就好了,当你需要用到Set时,array_unique就好了。概念简单,学习曲线平滑,当你需要深入时,你去看看array相关的函数就会有新的见解。
而透过PHP的源码,也能看见array、k-v array、class 底层都是HashTable。这样的内存管理有点粗放(你都用脚本词汇了,只要内存不泄露,内存管理粗放点也没啥),但使得PHP的底层数据结构显得单一简洁。相较于Python、Node那些脚本词汇,PHP时在v7版本才从底层上引入Set、Map、Queue等数据结构,也不能说PHP没有数据结构、但想PHP这样的瑞士军刀般array,是其他词汇少有的特性,这也是让我、和许多phper对PHP所以词汇难以格式的原因之一。
PHP Data Structures : 简介 – Manualwww.php.net
热布署
当我们在调试php-fpm程序的时候,改了代码,刷一下页面就能看见效果了。这样的简单直观的Debug体验,也是PHP独有的,编译性词汇C/C++,Java 你得点一下rebuild 吧,总之你说有宇宙最强IDE的加持,改了代码自动编译,编译的天数也不断吧。在看看Python、Node,你不点个restart、也得等npm重新编译是不,那个在线debug效率就比php-fpm慢了不少。
试想一下做为一个编码初学者,这种快速、所见即所得的调试体验是十分棒的,你搞别的词汇的,你还的配置一下IDE,或者改改package.json,做为代码初学者,哪晓得什么叫断点调试,file watch,我就晓得print(). (PS:许多PHPer写完一个function了,隔壁Javaer还在配置xml)。
好继续说热布署,那个是运维概念。是线上PHP服务需要正式发布更新,只需要把代码复制粘贴上服务器就完事了。这种布署体验,随便找个实习运维都会,直接ftp就能搞定。要是Java、Node,Python这种,普通运维是:1.代码打包,2.代码上传到线上,3.重启服务。如果是直接重启服务肯定会有中断天数,做为一个靠谱的运维,你得平滑重启。这一点就增加了许多工作成本。
总之这一切是有代价的,php-fpm的热布署是建立在重复编译之上的。随着那个计算机操控性的提高,编译天数基本上不再是系统的瓶颈。DB、IO反而是耗时大户。如果真要避免重复编译问题,采用php-cli模式也能解决,用惯了php-fpm模式的我,换php-cli模式,调试的第一感觉是慢。
php-fpm 框架,每次一次请求都是 compiler、init、 dispatch、 controller,会经可能优化这条流程。而php-cli 框架,compiler、 init 只会有一次,然后让每一次请求的 dispatch controller 很快很轻,这就会使得 init 这块 的逻辑做的比较重,所以改了代码重启会很慢。
类C句法
我在大学入门编程词汇是C/C++,当我看见PHP时,除了没有 main 函数,变量多了个dollar符号,其他句法都差不多。画不多说之间看下句法对照表:
句法对照C/C++(区分大小写)PHP(变量区分大小写)
变量赋值char a = a; /* 8位有符号*/
int a=10; /* 16位有符号*/
unsigned int a = 10; /* 16位无符号*/
short a = 10; /* 16位有符号*/
unsigned short a = 10;/* 16位无符号*/
long a = 10; /* 32位有符号*/
unsigned long a = 10; /* 32位无符号*/$i = 10; /* 变量以$开头*/
$pi = 3.14;
$a = a;
$a = Hello!;if () {} else {}if (a == 12) … else {};if ($a == 23) … else {};switchswitch (expr){
case expr1:
DoSomething;
break;
case expr2:
DoSomething;
Break;
case expr3:
DoSomething;
Break;
default: exprN;
}switch (expr){
case expr1:
DoSomething;
break;
case expr2:
default: exprN;
}forfor(expr1;expr2;expr3){
DoSomething;
}for(expr1;expr2;expr3){
DoSomething;
}foreachforeach($data as $key => $item) {
doSometheing;
}whilewhile(expr1)
{
}while(expr1)
{
}do {} while;do
{
}while(expr1);do
{
}while(expr1);函数int max(int num1, int num2)
{
// 局部变量声明
int result = 2;
return result;
}function main() {
return 0;
}指针int var1;
print(&var1);$a = 2;
$b = &$a;类class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
private
double height; // 盒子的高度
};class PhpClass {
public $age;
private $sex;
public function getAge () {
return $this->age;
}
}类属性、方法Box b = new Box();
print(b.length);
Box *b2 = &b;
printf(b.breadth);$pc = new PhpClass();
$pc->age;
$pc->getAge();以上表单参考自:
C、Delphi和PHP的基本上句法对照表 – pchmonster – 博客园www.cnblogs.com
PHP底层是C写的,能说学了C,再上看PHP,这不是C的脚本词汇么,在广大的C/C++大学入门教育的基础上,入手PHP时十分容易的。(所以、php国内所以火、谭浩强要付主要就责任!)
照相狸尾豆的web自然环境
我刚开始接触PHP时,没有尝试自己配置http代理,直接下载的集成自然环境——wamp,在windows上装好,PHP、Apache、MariaDB都能用了,写个
echo “Hello World!”;访问网页就能看见效果。
总之配置一套php开发自然环境是十分快的,配合Windows,双击exe、一路点点点就能搞定。如果你要写个Java还得配置下自然环境变量吧,还得介绍下什么是自然环境变量。写C#,先下个几个G的宇宙最强IDE。那个时候入门的小白稍微遇到点阻力就有可能打退堂鼓,如果阻力多一点,我们又痛失一位程序员。
我估计有人要说Node和Python也是照相狸尾豆,对,它们俩也不差。
再说下Serverless,最近炒的比较火的一个概念,我想说这不是php-fpm。Serverless特点:
无需devops无状态函数动态扩容无需devops,PHP基本上上不怎么让运维操心,有问题重启,代码正式发布ftp,某段调试代码exit()写了忘了删, php-fpm不会全部死掉,那个进程死掉后会自动fork新的进程(总之你把exit写在index.php 第一行,那我可没法了啊)。
关于第2点,php-fpm 热布署特点是。
第3点,如果你配置了 pm = dynamic,请求量大时php-fpm会自动fork更多子进程来处理请求,这是动态扩容。
差别 字符串堆叠,数数+ 操作符
做为弱类型词汇,大家都会遇到的问题。隔壁javascript 已经被这句代码搞得焦头烂额了。
var re = 1 + 1;而PHP直接将字符串串堆叠,与数数加,两个操作区分为两个句法。就完全避免了那个问题。
总结
PHP的学习曲线平坦,让采用它的人一蹴而就。PHP的句法简单,数据结构单一,降低了普通用户心智负担。PHP不失为我心中最合适的词汇。
原文链接:
https://zhuanlan.zhihu.com/p/342838568
