PHP如何自学?
PHP自从我工作已经用了10年了,我简单说一下我的学习路线和总结。
在上大学的时候,我就自学了PHP,当时PHP4还占市场一大部分。那怎么自学才好呢?我建议首先要熟悉计算机的基础知识,尤其是网络方面的,PHP主要用来开发网页,所以在学 PHP 的同时,也要看一下网页开发,例如前端语言 HTML + CSS + JavaScript。
然后是PHP的一些基础语法,内置函数。最好挑选一本入门的书,书上的例子最好亲自抄一遍,自己运行。记住这个非常重要,我当时只是看,后来导致能看懂,不会写,汗。
基础的学的差不多以后,下面就要看一些数据库 MySQL 和服务器 Linux 的内容,了解基本的增删改查的操作和服务器的配置,学会使用命令行。可以在自己的电脑上装一个虚拟机练练手。
这些都了解的差不多后,建议阅读一些开源程序的源代码,看看人家是怎么编程的,这会让你收获很大。
最后,记住,最最重要的是,一定要亲自写,多练,多拿一些小项目练练手,实践与知识结合,这样才能融会贯通。
有的php开发人员想再学一门开发语言,你觉得可以学哪些开发语言?为什么?
不是php想去再学一门其他语言。而是一个合格的php都会多种语言。从js到HTML,SQL和NOSQL,到各种js框架,更有甚者需要懂得服务器相关知识。还有最近流行的小程序开发。php开发是更适合绝大多数中小型企业,创业公司使用。因为他可以快速高效的开发一个web应用。所以需要每个php去学习更多的web相关的知识。
在php基础上至少要熟练使用一种框架,再考虑去研究框架底层原理。之后可以去熟悉php的其他应用,比如workerman(一个高性能异步的即时通讯框架)。完成这些之后再考虑去学习一门新的语言去丰富自己。
推荐一:Python。原因:简单,跟php像,各种语言的粘合剂
推荐二:java。都说java难,其实在有一定语言基础下学习无压力。原因:学习java的开发思想。比如:面向对象,依赖注入(目前很多主流的框架都已经使用到)等。
推荐三:根据个人兴趣和职业规划选择相应的技术,语言。相信有这些基础之后无论学什么都是很轻松的。
自学PHP,需要先学JavaScript吗?如果需要,建议先学哪个?
我们分别来了解一下这两个语言的种种:
1.PHP
难度:★★ 欢迎度:★★★★ 创始于:1994年
PHP我们要知道的是一种服务器端的脚本语言,专为网页开发而设计的,但也是一门用途广泛的语言。
PHP用来做什么:
PHP的优点:
容易上手:首先这是一门快速并且容易的服务端脚本语言,用于网页开发和其他的广泛用途。
社群强大:拥有很庞大的活跃社群,被广泛使用。开发者遇到的大多数问题都已经有前人的解决方案了。
数据库:对数据库来说是比较友好的,比如文件系统,图片系统等等。
PHP的缺点:
很容易学:就是很多很丑的代码,原因是有太多的初学者了,因为php容易学。其次是因为一些开源代码已经出现了超过十年,相对来说过时了。
速度:经过验证以后,PHP语言一般比它的竞争语言来说运行的比较慢。
错误处理:和其他语言相比,PHP的错误处理考虑不够周全,主要是因为PHP的开发历史比较久远了,需要支持老的版本;
2.JavaScript
语言难度:★★ 欢迎度:★★★★ 创始于:1995年
JavaScript是最通用的客户脚本语言。这就意味了JavaScript的代码是可以写进HTML页面的。当一个用户请求一个包含JavaScript的HTML页面的时候,这个脚本会被发送到浏览器然后浏览器通过它做一些事。
JS用来做什么:
JavaScript的优点:
速度:作为客户端来说,JS是非常快的。因为任何的代码功能可以立刻运行而不是和服务器通讯并且等待应答。
朴素:JavaScript学习和实施都是很简单的;
多功能性:JavaScript是可以和其他的语言相处的很融洽的并且可以用在很多的应用上。不像是PHP或者是SSL脚本,JavaScript能够嵌入到任何的web页面而不用考虑文件扩展名;
JavaScript的缺点:
安全:因为代码在客户的电脑上运营,在某些情况之下是会被恶意利用的。这也是一些人选择禁用JavaScript的原因。
最终用户的信赖:JavaScript有时候是会被不同的浏览器编译出来不同的结果。服务端脚本经常是会产生相同的输出,客户端的脚本会有少许不预知性。不要过多的设计到这个----你只要在常见的浏览器上测试你的脚本即可。
总结一下,两个语言学习都是脚本语言,并且相对来说难度不高。其实没必要分的那么清楚。并且这种脚本语言来说,你学会了一个,有了这样的思维,另外就会更加的容易。综上所述没有什么先后之分;php redis做mysql的缓存,怎么异步redis同步到mysql数据库?
正常情况下是没有问题的,
但是有人用恶意脚本进行刷奖,也就是同一个人发起大量请求,1秒可能一两百的请求甚至更多,而且不只一个人刷奖。
问题出在1这一步
举个例子,假设每人只能抽一次奖,因为请求太快,同一人的a,b两个请求几乎同时来,a走完抽奖逻辑了,并且在抽奖表中插入记录的过程时,因为mysql的性能的问题,b去走1这一步是读不到表中的记录的,因为a的插入根本没有完成。所以b请求会再走一次抽奖逻辑。造成同一人抽奖两次,然后再插入抽奖表。
我关心的是能否a插入抽奖表的瞬间,b就能判断出抽奖表有数据。
所以我觉得问题是mysql写入的不够快,读取的不够快,所以我要采用redis做一层快速缓存。
我们做的抽奖是单一奖品百分之百中奖,只限制奖品数量,所以必须保证每人只能抽一次,而且尽量在程序层面去解决。
如何去学习php加数据库?
不积跬步无以至千里,别想着急功近利就能学会,结果只会在开发中遇到问题都知道怎么解决。
学习php和mysql百度一下视频、电子书、开源项目,框架都很多了。随便找个教程坚持下去也能学会,但总得来说有以下学习过程吧。
1.学习php的基础知识,变量,字符串操作,数组操作,对象操作,文件操作,session和cookie操作,参数接收$_GET,$_POST,$_REQUEST,$_SERVER请求信息,数据库操作pdo,搞清楚客户端一个请求到服务器返回数据的过程等,就这些简单知识点你就可以搞简单网站一些接口了
2.当前面的都懂了,就可以学习高级点,如:异常处理,反射Reflection,GD库操作(生成验证码,图片水印旋转裁剪等图像操作),phar打包,socket通信,多进程pcntl和posix扩展对进程操作,进程间通信(共享内存sysvshm,shmop,消息队列sysvmsg,信号量sysvsem,信号,socket),如何实现mysql进程池,还有很重要的一个libevent,一个高性能事件通知网络库,很容易实现epoll异步非阻塞模型,可以实现高性能服务器
3.当上面的都了解了,就应该去了解php底层。了解phh底层sapi,zend引擎执行,如何生成opcache,zend虚拟机,gc机制等
而mysql的话首先了解sql语句增删改查,加上各种函数的sql怎么写,各种数据类型tinyint,smallint,int,bigint,float,varcar,char,datetime,time,timestamp,decimal等类型的区别长度等。
然后了解myisam,innodb引擎区别,innodb事务隔离级别之类,mysql索引优化,分库分表,mysql主从复制,mysql集群等。
然后仅仅懂php+mysql是不够的,基本上项目后台是自己搞,必须了解前端技术js+html+css,了解jquery、vue双向绑定等前端框架,也可以了解前端ui框架bootstrap,Element-ui等。还有项目一般部署在linux,起码要了解linux的基础命令,如:rm -rf /而网站发展起来了,你肯定要懂缓存memcache、redis,了解redis的各种类型string,hash,list,set,zset,HyperLogLog,geohash等,发布订阅,持久化AOF和RDB, 缓存穿透缓存雪崩等高并发时缓存可能出现的问题。然后项目再大点,就要懂LVS,HAProxy,nginx等负载均衡,然后redis要分布式部署,怎样通过keepalived+Twemproxy实现redis高可用,如何实现高性能,高可用,高并发,服务器多机房容灾,隔离,限流,降级等架构知识
好吧,说了一大堆,我也不是很懂...