秒会+实战PHP程序设计培训(1)

王志勇 发表于 2021年10月29日 09:16

直接上干货。2个月前突然有位网友对大型数据库提出异议,其实小型数据库和大型数据库的区别是大型数据库在开发时要为将来的大流量而设计。如果你掌握了这些思路,是能够从0开发贴吧、天涯、Wordpress、Typehco这类程序的。本人从2002年到现在,一直在做Web编程。现在可能稍微有点时间了,于是我才能马上启动这个项目。这几年,手里一直压着5个项目没时间做:独立微博Eachval、随身日记本(笔记)Takeval、PHP实战+独创算法秒会培训、第3版论坛程序、0资源占用的VPS面板。

首先要说饱受诟病的PHP性能,其实PHP的性能完全不在JSP之下,庆幸之前看到有同行在网上说过这么一句。这个圈内,很少人是同时大量做过PHP、Java、Golang这3种最为热门的语言,所以往往他们只能客观评论自己熟练的语言。我本人同时做过ASP、PHP的长期大量开发。以前做过7年的ASP编程,用ASP编写过论坛、博客、类似太平洋那样的报价平台的初步开发(历时3个月的封闭开发)、电子型号搜索项目。2009年时转到PHP,发现ASP和PHP无论是性能,还是语言的简洁度,都是天壤之别,PHP比ASP胜出很多。简言之,PHP语言既简单、性能又高我在前年用了1天多的时间,把当时主流的PHP 5.1~PHP 7.4在Debian/Ubuntu/CentOS都测试了一遍,PHP 7.4速度约是PHP 7.3的1.9~2.1倍,PHP 7.4速度约是PHP 5.3的10倍。auiou.com博客的速度本身是一个编程的实例,这个博客由于数据库是切分的(分布式),即使文章达到1000篇、1万篇、10万篇……速度都是一样快的,现在是运行在PHP 5.3下,有几个站点运行在PHP 7.4,如cn.blogval.com。auiou.com博客现在的运行环境如下截图:

这个博客的空间是Virmach的256M美国VPS。为什么现在会运行在PHP 5.3下?主要是因为内存只有256M,安装PHP 7.4可能会内存紧张,现在速度也很快,也没有时间去折腾,所以暂时使用PHP 5.3。2019年时曾经在PHP 7.4下+香港VPS运行了10个月。

PHP的高并发环境分析
分析请见前文。PHP的瓶颈,主要是出在MySQL。如果不用MySQL,高并发的性能很有可能会很惊人

如何快速从0开始学编程?(1)
请记住这个顺序:程序不是用来看的,而是用来写的。

因为如果出现一个算式8+3=11,只给你一个结果11,那么如何还原为8+3呢?也许是2+9呢。同理,开发时大量的思路、测试过程,是无法写在程序里的。而且思路一旦忘记,是很难还原的

我写程序时,只记录最关键的部分,或者推导出新的算法、常用算法,那么一定会记录在程序库里。而不写开发文档,因为写开发文档,至少要比开发程序本身要多出3~5倍的时间,没有这个时间,只写少量的关键参数、关键的开发文档。

我近期写的程序实例,是2019年完成的Feedval RSS阅读器,单这个项目,历时2个月的时间从0开发到完成,可在 cn.feedval.com 按照提示安装。所有的程序成品都是这样的模块化紧凑风格,如下图,我个人觉得更易读,变量全部用$a1、$a2,$b1、$b2在大型项目里更有助于提高开发速度,因为用英语单词命名,美观是美观,但光是变量名就要想半天,长变量名输入既麻烦又容易出错,如果英文名想改,又得改很长时间。

我个人设定$e1、$e2、$e3,$e开头的全部是全局变量;$s1、$s2,$s开头的是被多个文件在同时引用的include文件的更加全局的变量,目前只用到$s1、$s2、$s3。

其余的,大部分是局部变量。模块里更局部的变量,以及循环程序的变量,也大量使用一位数的变量,如$a,$b,$c,$i,等等……

因为开发程序中总是在调试,所以这些简化的变量名,是从来不会出现冲突的。如果出现冲突,是书写有问题,需要修改。

这类成品之所以难以读懂,是因为思路都不会体现在程序里,想知道思路必须有开发文档。如果别人给我这样的程序,我也看不懂,需要花费半年~2年以上才能稍微读懂一个像Wordpress这样的作品。

但是,如果是自己开发的程序,即使10年没有再看过这个程序,也能看懂。尽管我现在41岁(对于程序开发是高龄),记忆力在大幅度减退,但还是能回忆得起来写过的每一个程序,以及大部分程序语句的作用。像上述的Feedval RSS阅读器这个作品,里面至少有2000~5000个模块。

如何快速从0开始学编程?(2)
需要再重复上述的(1)的一个核心,程序不是用来看的,而是用来写的。第2个核心:每一个特定功能,核心的语句,就是那么几个。

所以,一定要掌握核心的语句。很多厚厚的编程书,看完了还是什么都没学会。因为很多编程类的书,没有强调核心语句,里面讲的各种知识,大部分都是不太用得上的。

如何快速从0开始学编程?(3)
请理解第3个核心:程序的本质,就是命令。

如果你充分理解了这个本质,那么开发起来会更得心应手,能更理解程序,不会再觉得程序会是那么深不可测。

PHP、Java、Golang、Python、Node.js等语言,再复杂的程序,都是命令的组合。

尤其是Shell编程,最能体现这一点。比如VPS我们都是用SSH来输入Shell命令,但是当Shell命令多的时候,就可以建立.sh文件。

这些.sh文件,里面可以写入if语句、循环语句、加减运算等,所以原来的Shell命令,就成了Shell程序。

Shell程序和PHP程序的区别
因为2016年开始我计划开发VPS面板,所以必须写很多的Shell程序。PHP语言,我在2009年时用了7天的时间,从0学习到能完全上手做项目。但是,Shell程序,差不多用了1个月的时间,才初步上手。

为什么会有这样大的差别?

一是因为Shell的语法实在是比较啰嗦,PHP语言因为有花括号{}能够易读很多。不要小看这个花括号,我个人建议程序语言还是不能去掉的,现在有很多种语言都没有花括号{}。而是用if……end if,或者if……fi这样的语法,这种语法还不如用花括号{}简洁。

有人吐槽PHP有花括号{},使PHP语言不够简洁。其实,有了这个花括号,可以使程序的可读性大为提高,可读性的提高是几何级的,也许就因为有这个花括号,由于可读性的提高,能让开发速度提高到3~20倍,因为if,for这些最常用的语句,平时一般都会套3~5层以上,甚至更多,语句里套的层越多,就越难读、开发速度就越慢

也就是别人用了3~5个月的时间,也许你15~30天就完成了。

当然,由于程序开发的工作量庞大,什么时候能够完成,是无法准确计算的。

二是因为PHP的函数丰富,语言比Shell简洁。

PHP语言可改进的地方
上述提到PHP官方语言设计的花括号{}最好不要去掉,能几何级倍数地提高可读性。但是,PHP的变量名前$,个人觉得PHP官方将来是完全可以去掉的。因为变量名前加$,其实是比较繁琐的,但是不得不接受这一点。

之所以有$,我觉得有可能是当初PHP官方在设计这个语言时,文本工具无法按单字查找,比如ac、ac1、ac2、ac3这4个变量,查找关键词“ac”,另外的3个关键词也会被找到。

现在有了EmEditor,查找时,把“仅搜寻单字”打上勾,就会只显示ac,并且高亮显示,如下图:

如果把“仅搜寻单字”的勾去掉,就变成了传统的文本工具,查找难度就加大,要消耗更多的时间,如下图:

因此,EmEditor的“仅搜寻单字”,是一个重要的基础功能

记忆力减退怎么办?
程序开发需要记忆大量的信息,尤其是记住自己开发过的项目。但是,即使记忆力再差,只要是自己开发过的,是很难100%忘的,用的时候一定能够想起来一些,然后再慢慢查找,所以不用担心记忆力的问题。

程序开发,会让人的记忆力变得更差。因为时刻都在开发新的东西,而且工作量极其庞大,所以会记不住旧的东西。

8条评论:
1   angel2018 2021-10-29 15:37
勇哥,代码效率非常高。牛啊。
什么时候打算开培训教程,授课啊?

自由勇 2021-10-29 16:07
谢谢阅读!本文已经是正式第一期。大家都能比我做得更好。
前两三期会重点谈编程的思想,这个思想也能移植到其它语言,都是完全通用的。
后面会很快谈核心语句。

2   老张博客 2021-10-29 15:56
收藏了,之前学会一段时间的PHP,但是全是英语,没有学下去。

自由勇 2021-10-29 16:08
谢谢阅读!如果熟练了核心语句,基本用不到英语。英语主要用来做英文页。
核心语句其实就是那几个。

3   叶开楗 2021-10-29 21:22
我基本也是瞎命名的 直接 pingyin 哈哈!
4   CcChen 2021-10-31 14:46
PHP作为web脚本而言运行效率应该是最佳的。使用关系型数据目的是方便数据管理和稳定性,当然会牺牲一些性能。具体如何部署应该根据实际使用需求选择。
目前我使用的编辑器是VS code,插件非常丰富。好的工具可以让开发效率事半功倍。
直接用function编写的程序效率应该还行吧,但是这样编写程序可读性不是很好。我还是习惯对象封装方式编写,因为后期维护会变的简单而且条理化。变量命令我习惯用驼峰式命名法,这也是一般协同开发提倡的。
初学者我还是建议直接套用编码规范进行学习,因为这样能让你快速融入开发社区。

自由勇 2021-10-31 15:26
这种紧凑式的编码个人觉得还很好,和传统的回行、缩进布局相比,可读性基本一样,而且紧凑式往往可读性更好,因为那些排列在一行的语句,很多都是我之前调试好的小模块,关联度不高的地方,马上回行。

这有点类似于电路板,成品的电路板是很紧凑的。

紧凑式的编码,就像文章的文字,是一直排下去的。
传统的回行、缩进布局,就像诗歌一样,习惯性地强制回行。

如果对于习惯阅读回行代码的开发者,分析程序时,可以编写一个分析器,把;号都替换成“分号加回车符”,即;替换成;\r\n,这样程序变成了传统的回行。
分析器还需要编写一个分析所有花括号的起始位置的功能,解读程序一次大约能节省20分钟~2小时以上。

5   sdtop 2021-11-12 10:34
收藏了。一定好好的多看几遍

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (42周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2021年12月(11)
2021年11月(16)
2021年10月(18)
2021年09月(14)
2021年08月(19)
2021年07月(15)
2021年06月(9)
2021年05月(17)
2021年04月(25)
2021年03月(6)
2021年02月(17)
2021年01月(30)
2020年12月(19)
2020年11月(18)
2020年10月(15)
2020年09月(14)
2020年08月(14)
2020年07月(14)
2020年06月(16)
2020年05月(13)
2020年04月(18)
2020年03月(14)
2020年02月(15)
2020年01月(16)
2019年12月(11)
2019年11月(26)
2019年10月(25)
2019年09月(30)
2019年08月(10)
2019年07月(29)
2019年06月(30)
2019年05月(26)
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2022 auiou.com All rights reserved.
此Blog程序由王志勇编写