写给选择了慕课,同样选择了PHP的你

383 查看

前言
在这里想说说为什么会写这个文章,当然是为了慕女神放出来的礼物了!!!骗你们的了,虽然是真的很想要,但不过有着更重要的目的,那就是我想跟大家分享。

正如大家看很多小说一样,猪脚在修炼的时候总会遇到瓶颈,瓶颈突破最好的方法就是去找各种资源大神来冲激,我希望分享就是这样的资源。

在这里简单的说一下这篇文章想表达什么,让你可以清楚的知道这篇文章里面会有什么样你感兴趣的内容。

1、php是什么?(将结合自己看法以及网络资源,不知道是否能让阅读的你眼前一新)
2、Php能做什么?(除了知道它可以用来做网站,它还能做什么?)
3、分析一个问题,我学习同时学习了前端工程师计划和php工程师计划,会不会冲突?(问题进而可以理解成,到底是要将编程语言学习的有深度,还是要将其学习的有广度?)
4、探讨:一个PHPer应该如何构建自己的知识体系?什么是PHPer的知识体系?
如果看到这里,如果阅读的你还是有着兴趣,那我希望下面的内容一定不会让你很失望。

正文

1、php是什么?
首先我们应该看看百度词条:

“PHP(外文名:PHP: Hypertext
Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP
独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。”

然而我们应该看看更加有深度的看法:

PHP 指的是我们从外面看到的一套完整的系统。

“从功能上来分,我们可以分为三部分:
1、 解释器部分(Zend 以引擎),负责对输入代码的分析、翻译和执行;
2、 功能性部分(PHP功能函数以及扩展),负责具体实现语言的各种功能(比如它的函数等等);
3、 接口部分(SAPI),负责同 WEB 服务器的会话等功能。

Zend包括了第一部分的全部和第二部分的局部,PHP内核 包括了第二部分的局部和第三部分的全部。他们合起来称之为 PHP 包。Zend 构成了语言的核心,同时也包含了一些最基本的 PHP 预定义函数的实现。PHP 包(内核)则包含了所有创造出语言本身各种显著特性的模块。

从内容模块上来分:我们可以分为四层体系结构:
1)Zend引擎:Zend整体用纯c实现,是php 的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如 hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。
2)Extensions扩展:围绕着zend引 擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现, 用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典 型应用)。
3)Sapi :Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过 sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
4)上层应用: 这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

其架构思想:引擎(Zend)+扩展(ext)的模式:降低内部耦合

中间层(sapi):web server和php的通信接口, 隔绝web server和php。

是否觉得档次一下就上去?
原文地址 因为博主对版权进行了声明,所以在此我并未对全文进行转载,只是截取部分内容,大家有兴趣可以去阅读原文,同时里面也讲到PHP生命周期,将更好的帮助你学习PHP工程师的计划。)

看到这里你,对PHP的底层有大致了解,那么我们再进行一个转折点,然而PHP是什么?

PHP是一个在后端处理数据的工具。为什么这么说?

参加PHP计划的小伙伴可以点开计划的页面(没有参加的小伙伴也可以点开看)。其中,MySQL是被独立出来的虽然是叫做数据库技术,但是里面的内容都是MySQL相关的,至于为什么不叫MySQL技术而是叫数据库技术,在接下来的内容我在为大家分享我的见解。

所以,PHP计划的小伙伴可以很清楚的知道了,MySQL数据库是PHP学习中很重要的一个内容。同时,在我们配置开发环境的时候,通常都是用WAMP或者LAMP,那么这两个分别又是什么?WAMP = Window(操作系统)+Apache(服务器)+Msql(数据库)+PHP(脚本语言);LAMP = Linux(操作系统)+Apache(服务器)+Msql(数据库)+PHP(脚本语言),同样,作为要成为PHP工程师的我们需要了解的还有LNMP = Linux(操作系统)+Nginx(服务器)+Msql(数据库)+PHP(脚本语言)。

这是目前比较流行的开发环境配置,当然这只是一部分,WAMP更多的还是用于练习,最终大多数的开发还是要在Linux环境下进行的,当然我不能说的绝对,可能也有在WAMP下的。

说了这么多,无非还是想强调MySQL的重要性,同时也是从某一个角度来表明了,PHP更多的在我们学习以后,它的作用是用于用户和服务器,前端和后端的数据处理。当然PHP的作用不单单只有这么点,但是作为参加PHP计划的我们来说,知道这一点是很重要的,因为它将贯穿你的整个学习过程。

而决定你PHP是否学好的一个标准,那就是你是否能熟练的使用PHP来跟数据库进行交互,如果将你比作是一个君王,PHP是一个将军,而MySQL是士兵,你是否能做到让你的将军(PHP)听你的话,然后让将军(PHP)指挥士兵(MySQL)指哪打哪?

上述是一个对PHP简单的认识,之所以说这么多,我觉得很多朋友应该跟我一样,非科班出生,选择编程更多的是兴趣,或者是生活压力,也有是工作需要。但是我们并不是很清楚PHP到底是什么,只知道PHP工资高,很多人说PHP好。我不否认PHP是有缺点,也不否认PHP很完美,可是我觉得,既然选择了PHP,那我们就要很清楚的知道,它究竟是什么?可以用来做什么?

2、PHP可以做什么?
这个问题是一个简单科普的问题,正如很多人知道的,PHP可以用来做网站,从上述我们也知道了,PHP实际上做的工作是在后端对网站的数据进行处理,PHP也没有大家想象的那么神秘。在此做一个解释,这次活动我并没有找到伙伴,原因就是大家都在学前端!!

我担心如果我不做出解释,我会被取消这次参加活动资格~ 简单谈一下我觉得为什么那么多人选择前端,同时继续安利大家加入PHP!

不得不说前端需求越来越多,随着移动互联网的发展,越来越多的人可以随时随地的浏览网上的信息,而前端工程师要做的工作之一,就是如何让用户浏览到你想让用户浏览的信息,然后让他们尽可能多的在你设计的这个页面停留。(这句话再次不做过多解释,仅仅是一个看法。)

那么和PHP有什么关系?首先,一个PHP工程师必须是要懂前端的,而且很可能是很懂前端。

Why?!PHP用来处理后台的数据,这个数据是用户产生的,而用户产生数据并发送给PHP的毕竟之路那就是前端。这样上面那句话也很好理解了,只有让用户更可能多的停留,这样才能更大的增加用户将数据发送给PHP处理的可能性,毕竟如果页面做的太丑,可能用户打开一秒看到页面加载完成以后,直接右上角了呢?So,前端工程师做的更多的工作是为了让PHP有数据可以处理,但是万一你遇到了很傲娇的前端工程师,某天你没有讨好她,她说:我不乐意给你写美美的页面,你自己想办法吧。难道我们可怜的PHP能自己做出一个图标让用户去点然后输入数据吗?

在这里负责任的告诉大家,真的可以。。。(PHP可以写桌面图标)下面让我们来介绍PHP的另一个性能。
PHP的CLI:命令行调用的应用模式。

这个模式其实很少使用,但是我们依旧可以从我们PHP计划中的一些课程中发现这样的使用,详情参见PHP进阶面向对象程序设计,或许你很郁闷为什么老师跟你调试的方法不一样?那么看到这里你应该懂了,PHP是支持命令行的~那么在命令行下也是进行一些和它在浏览器中更多不同的特性,那么接着让我们进行一个跳跃。

PHP命令行调用中颠覆性的一个特性,PHP多线程。 众所周知,PHP是出了名的单线程,可是在PHP命令行调用中,它却可以变得多线程,原因就是,这里的多线程并不是真正意义上的多线程,而是多进程。

原谅up主才疏学浅,我所知道的就只有这么多,但是我相信在某种程度上以及解决了阅读的你的一部分疑问。更原谅我没有讲的很清楚,因为这些非常amazing的东西,还需要热爱或者未来热爱PHP的你去挖掘~

3、我学习同时学习了前端工程师计划和php工程师计划,会不会冲突?
(问题进而可以理解成,到底是要将编程语言学习的有深度,还是要将其学习的有广度?)

如果看到了这里,那么你已经很清楚我的观点了,也可以理解我为什么不解释那句话,因为在我看来,一个不懂前端的PHPer是一个不合格的PHPer!

同时,一个不懂PHPer的前端,也不是一个好的前端!(开玩笑~)。我在这里非常建议大家可以掌握更多的内容,更多的知识,因为在你真正工作的时候,面对的就不是慕课网中这么简单的例子,而是更复杂的设计,这个时候,是需要你动用全部的知识和能力去解决的。

那么问题来了,究竟应该怎么学?

难道把所有内容看一遍,然后在做一个项目就是学好了?很抱歉,我无法很好的给大家解释这个问题,因为我也在学习过程中,我同时学习了前端后端,我知道他们相辅相成,本来在决定写这篇文章的时候,我觉得我已经很好的解决了这个问题,我可以跟大家分享我的观点,但是我发现我也仅仅是一知半解,毕竟,我获取这些知识的渠道如同你们一样,都是看别人的分享,别人的想法,我没有实践过,我不能将道听途说的东西去分享给更多人。

(个人看法是觉得,只有经历过的事情写出来才具有真实性,如果我把我听到的事情说出来,我不能保证真实性,此句话并没有地图炮意思。)

但是我们可以来讨论下一个问题,到底是要将编程语言学习的有深度,还是要将其学习的有广度?
非常开心的是,已经有热爱分享的小伙伴分享了比我更加专业的回答

希望可以对迷茫的你有帮助,无所谓错对,更重要的是找到自己的标准。找到适合自己的内容。
希望看到这里的你觉得这篇分享对你有帮助,更加希望原谅我的烂尾,我想得到大家更多的讨论,更重要的是:

我不能保证我能得奖啊啊啊啊,我真的想要衣服!!!写那么多!万一得不到怎么办!(希望大家可以忽略。)

这篇只是一个开始,下一次,接着这篇之后,我想跟大家分享如何建立自己的知识体系,让编程成为你生活中的一个乐趣,我在建立自己的知识体系的时候经历了太多,直到写这到这句话,我都无法真正的确定自己建立怎样的知识体系,好在皇天不负有心人,有一位好心的技术总监可能愿意接受我的预约帮我解答困惑。。。所以。。我其实是去准备面试了。我就是这么话多。。