您的位置:网站首页 > asp源码 > 正文

怎样深入学习php成为php高手?

类别:asp源码 日期:2019-10-6 7:07:19 人气: 来源:

  按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标。

  本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言。(未来技术变化不在讨论范围)

  目标:能够完成基本的LNMP系统安装,简单配置;能够做基本的简单系统的PHP开发;能够在PHP中型系统中支持某个PHP功能模块的开发。

  基本命令、操作、启动、基本服务配置(包括rpm安装文件,各种服务配置等);会写简单的shell

  会自己搭建mysql,知道基本的mysql配置选项;知道innodb和myisam的区别,知道针对InnoDB和MyISAM两个引擎的不同 配置选项;知道基本的两个引擎的差异和选择的区别;能够纯手工编译搭建一个MySQL数据库并且配置好编码等正常稳定运行;核心主旨是能够搭建一个可 运行的MySQL数据库。

  基本语法数组、字符串、数据库、XML、Socket、/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api(mysql /mysqli/PDO),知道各种编码问题的解决;知道常规熟练使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf 等);了解基本MVC的运行机制和为什么这么做,稍微知道不同的PHP框架之间的区别;能够快速学习一个MVC框架。能够知道开发工程中的文件目录组织,有基本的良好的代码结构和风格,能够完成小系统的开发和中型系统中某个模块的开发工作。

  如果条件时间允许,可以适当学习下 HTML/CSS/JS 等相关知识,知道什么web标准,div+css的web/wap页面模式,知道 HTML5和HTML4的区别;了解一些基本的前端只是和JS框架(jQuery之类的);了解一些基本的JavaScript编程知识;(本项不是必须 项,如果有时间,稍微了解一下是可以的,不过重点,除非个人有强烈兴趣)

  能够完成小型系统的基本设计,包括简单的数据库设计,能够完成基本的:浏览器 - Nginx+PHP - 数据库 架构的设计开发工作;能够支撑每天几十万到数百万流量网站的开发工作;

  目标:能够随时随地搭建好LNMP,快速完成常规配置;能够解决大部分遇到的开发和线上的问题;能够承担中型系统的构架和开发工作;能够在大型系统中承担某个中型模块的开发工作;

  在第一阶段的基础,能够流畅的使用Shell脚本来完成很多自动化的工作;awk/sed/perl 也操作的不错,能够完成很多文本处理和数 据统计等工作;基本能够安装大部分非特殊的Linux程序(包括各种库、包、第三方依赖等等,比如MongoDB/Redis/Sphinx /Luncene/SVN之类的);了解基本的Linux服务,知道如何查看Linux的性能指标数据,知道基本的Linux下面的问题等。

  在第一阶段的基础,了解复杂一些的Nginx配置;包括 多核配置、events、proxy_pass,sendfile/tcp_*配置, 知道超时等相关配置和性能影响;知道nginx除了web server,还能够承担代理服务器、反向静态服务器等配置;知道基本的nginx配置调优; 知道如何配置权限、编译一个nginx扩展到nginx;知道基本的nginx运行原理(master/worker机制,epoll),知道为什么 nginx性能比apache性能好等知识;

  在第一阶段的基础,在MySQL开发方面,掌握很多小技巧,包括常规SQL优化(group by/order by/rand优化等);

  知道MySQL的性能,包括slow_log/explain等,还 能够知道基本的索引建立处理等知识;原理方面了解基本的MySQL的架构(Server+存储引擎),知道基本的InnoDB/MyISAM索引存储结构 和不同(聚簇索引,B树);知道基本的InnoDB事务处理机制;了解大部分MySQL异常情况的处理方案(或者知道哪儿找到处理方案)。条件允许的情 况,了解一下NoSQL的代表MongoDB数据库,顺便对比跟MySQL的差别,同事能够在合适的应用场景安全谨慎的使用MongoDB,知道基本 的PHP与MongoDB的结合开发。

  在大部分中型系统里面一定会涉及到缓存处理,所以一定要了解基本的缓存;知道Memcached和Redis的异同和应用场景,能够安 装 Redis/Memcached,了解Memcahed的一些基本特性和,比如最大的value值,知道PHP跟他们的使用结合;Redis了解 基本工作原理和使用,了解常规的数据类型,知道什么场景应用什么类型,了解Redis的事务等等。原理部分,能够大概了解Memcached的内存结构 (slab机制),redis就了解常用数据类型底层实现存储结构(SDS/链表/SkipList/HashTable)等等,顺便了解一下Redis 的事务、RDB、AOF等机制更好

  除了第一阶段的能力,安装配置方面能够随意安装PHP和各种第三方扩展的编译安装配置;了解php-fpm的大部分配置选项和含义(如 max_requests/max_children/request_terminate_timeout之类的影响性能的配置),知道mod_php /stcgi的区别;在PHP方面已经能够熟练各种基础技术,还包括各种深入些的PHP,包括对PHP面向对象的深入理解/SPL/语法层面的特殊特 性比如反射之类的;在框架方面已经阅读过最少一个以上常规PHP MVC框架的代码了,知道基本PHP框架内部实现机制和设计思想;在PHP开发中已经能 够熟练使用常规的设计模式来应用开发(抽象工厂/单例/观察者/命令链/策略/适配器 等模式);开发自己的PHP MVC框架来充分让开发化, 让自己深入理解MVC模式,也让自己能够在业务项目开发里快速升级;熟悉PHP的各种代码优化方法,熟悉大部分PHP安全方面问题的解决处理;熟悉基本的 PHP执行的机制原理(Zend引擎/扩展基本工作机制);

  开始涉猎一定的C/C++语言,能够写基本的C/C++代码,对基本的C/C++语法熟悉(指针、数组操作、字符串、常规标准API)和数据结构 (链表、树、哈希、队列)有一定的熟悉下;对Linux下面的C语言开发有基本的了解概念,会简单的makefile文件编写,能够使用简单的 GCC/B的程序编译简单调试工作;对基本的网络编程有大概了解。(本项是为了向更高层次打下基础)

  在第一阶段的基础,熟悉基本的HTTP协议(协议代码200/300/400/500,基本的HTTP交互头);条件允许,可以在深入写出稍微 优雅的HTML+CSS+JavaScript,或者能够大致简单使用某些前端框架(jQuery/YUI/ExtJS/RequireJS /BootStrap之类);如果条件允许,可以深入学习JavaScript编程,比如闭包机制、DOM处理;再深入些可以读读jQuery源码做深入 学习。(本项不做重点学习,除非对前端有兴趣)

  能够设计大部分中型系统的网站架构、数据库、基本PHP框架选型;性能测试排查处理等;能够完成类似:浏览 器 - CDN(Squid) - Nginx+PHP - 缓存 - 数据库 结构网站的基本设计开发;能够支撑 每百万到千万流量基本网站的开发工作;

  目标:除了能够完成基本的PHP业务开发,还能够解决大部分深入复杂的技术问题,并且可以设计完成中大型的系统设计和开发工作;自己能够hold深入某个技术方向,在这块比较专业。(比如在MySQL、Nginx、PHP、Redis等等任一方向深入研究)

  除了第二阶段的能力,在Linux下面除了常规的操作和性能,还能够使用很多高级复杂的命令完成工作(watch/tcpdump /starce/ldd/ar等);在shell脚本方面,已经能够编写比较复杂的shell脚本(超过500行)来协助完成很多包括备份、自动化处理、 等工作的shell;对awk/sed/perl 等应用已经如火纯青,能够随意操作控制处理文本统计分析各种复杂格式的数据;对Linux内部机制 有一些了解,对内核模块加载,启动错误处理等等有个基本的处理;同时对一些其他相关的东西也了解,比如NFS、磁盘管理等等;

  在第二阶段的基础,已经能够把Nginx操作的很熟练,能够对Nginx进行更深入的运维工作,比如、性能优化,复杂问题处理等等;看个人 兴趣,更多方面可以考虑侧重在关于Nginx工作原理部分的深入学习,主要表现在阅读源码开始,比如具体的master/worker工作机 制,Nginx内部的事件处理,内存管理等等;同时可以学习Nginx扩展的开发,可以定制一些自己私有的扩展;同时可以对Nginx+Lua有一定程度 的了解,看看是否可以结合应用出更好模式;这个阶段的要求是对Nginx原理的深入理解,可以考虑成为Nginx方向的深入专业者。

  在第二阶段的基础,在MySQL应用方面,除了之前的基本SQL优化,还能够在完成一些复杂操作,比如大批量数据的导入导出,线上大批量数据的 更改表结构或者增删索引字段等等高危操作;除了安装配置,已经能够处理更多复杂的MySQL的问题,比如各种问题的,主从同步延迟问题的解决、跨机房 同步数据方案、MySQL高可用架构等都有涉及了解;对MySQL应用层面,对MySQL的核心关键技术比较熟悉,比如事务机制(隔离级别、锁等)、对触 发器、分区等技术有一定了解和应用;对MySQL性能方面,有包括磁盘优化(SAS迁移到SSD)、服务器优化(内存、服务器本身配置)、除了二阶段的其 他核能优化选项(innodb_log_buffer_size/back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout等)、连接池软件选择应用,对show * (show status/show profile)类的操作语句有深入了解,能够完成大部分的性能问题;MySQL备份技术的深入熟悉,包括灾备 还原、对Binlog的深入理解,冷热备份,多IDC备份等;在MySQL原理方面,有更多了解,比如对MySQL的工作机制开始阅读部分源码,比如对主 从同步(复制)技术的源码学习,或者对某个存储引擎(MyISAM/Innodb/TokuDB)等等的源码学习理解,如果条件允许,可以参考CSV引擎 开发自己简单的存储引擎来保存一些数据,增强对MySQL的理解;在这个过程,如果自己有兴趣,也可以考虑往DBA方向发展。MongoDB层面,可以考 虑比如说在写少读多的情况开始在线上应用MongoDB,或者是做一些线上的数据分析处理的操作,具体场景可以按照工作来,不过核心是要更好的深入理解 RMDBS和NoSQL的不同场景下面的应用,如果条件或者兴趣允许,可以开始深入学习一下MongoDB的工作机制。

  在第二阶段的基础,能够更深入的应用和学习。因为Memcached不是特别复杂,可以把源码进行阅读,特别是内存管理部分,方便深入理 解;Redis部分,可以多做一些复杂的数据结构的应用(zset来做排行榜排序操作/事务处理用来原子性在秒杀类场景应用之类的使用操作);多涉及 aof等同步机制的学习应用,设计一个高可用的Redis应用架构和集群;可以深入的学习一下Redis的源码,把在第二阶段积累的知识都可以应用 上,特别可以阅读一下包括核心事件管理、内存管理、内部核心数据结构等充分学习了解一下。如果兴趣允许,可以成为一个Redis方面非常专业的使用者。

  作为基础核心技能,我们在第二阶段的基础,需要有更深入的学习和应用。从基本代码应用来说,能够解决在PHP开发中遇到95%的问题,了解 大部分PHP的技巧;对大部分的PHP框架能够迅速在一天内上手使用,并且了解各个主流PHP框架的优缺点,能够迅速方便项目开发中做技术选型;在配置方 面,除了常规第二阶段会的知识,会了解一些比较偏门的配置选项(php auto_prepend_file/auto_append_file),包括 扩展中的一些复杂高级配置和原理(比如memcached扩展配置中的memcache.hash_strategy、apc扩展配置中的 apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之类的);对php的 工作机制比较了解,包括php-fpm工作机制(比如php-fpm在不同配置机器下面进程数量计算以及原理),对zend引擎有基本熟悉 (vm/gc/stream处理),阅读过基本的PHP内核源码(或者阅读过相关文章),对PHP内部机制的大部分核心数据结构(基础类型/Array /Object)实现有了解,对于核心基础结构(zval/hashtable/gc)有深入学习了解;能够进行基本的PHP扩展开发,了解一些扩展开发 的中高级知识(minit/rinit等),熟悉php跟apache/nginx不同的通信交互方式细节(mod_php/stcgi);除了开发 PHP扩展,可以考虑学习开发Zend扩展,从更底层去了解PHP。

  在第二阶段基础,能够在C/C++语言方面有更深入的学习了解,能够完成中小型C/C++系统的开发工作;除了基本第二阶段的基础C/C++语 法和数据结构,也能够学习一些特殊数据结构(b-tree/rb-tree/skiplist/lsm-tree/trie-tree等)方便在特殊工作 中需求;在系统编程方面,熟悉多进程、多线程编程;多进程情况下面了解大部分多进程之间的通信方式,能够灵活选择通信方式(共享内存/信号量/管道等); 多线程编程能够良好的解决锁冲突问题,并且能够进行多线程程序的开发调试工作;同时对网络编程比较熟悉,了解多进程模型/多线程模型/异步网络IO模型的 差别和选型,熟悉不同异步网络IO模型的原理和差异(select/poll/epoll/iocp等),并且熟悉常见的异步框架(ACE/ICE /libev/libevent/libuv/Boost.ASIO等)和使用,如果闲暇也可以看看一些国产自己开发的库(比如muduo);同时能够设 计好的高并发程序架构(leader-follow/master-worker等);了解大部分C/C++后端Server开发中的问题(内存管理、日 志打印、高并发、前后端通信协议、服务),知道各个后端服务RPC通信问题(struct/http/thirft/protobuf等);能够更熟 络的使用GCC和B来开发编译调试程序,在线上程序core掉后能够迅速解决问题;通用模块开发方面,可以积累或者开发一些通用的工具或库 (比如异步网络框架、日志库、内存池、线程池等),不过开发后是否应用要谨慎,省的埋坑去追bug;

  深入了解HTTP协议(包括各个细致协议特殊协议代码和背后原因,比如302静态文件缓存了,502是nginx后面php挂了之类的);除了之前 的前端方面的各种框架应用整合能力,前端方面的学习如果有兴趣可以更深入,表现形式是,可以自己开发一些类似jQuery的前端框架,或者开发一个富文本 编辑器之类的比较琐碎JavaScript;

  在基础的PHP/C/C++语言方面有基本积累,在当前阶段可以尝试学习不同的编程语言,看个人兴趣爱好,脚本类语言可以学学 Python /Ruby 之类的,函数式编程语言可以试试 Lisp/Haskell/Scala/Erlang 之类的,静态语言可以试试 Java /Golang,数据统计分析可以了解了解R语言,如果想换个视角做后端业务,可以试试 Node.js还有前面提到的跟Nginx结合的 Nginx_Lua等。学习不同的语言主要是提升自己的视野和解决问题手段的差异,比如会了解除了进程/线程,还有轻量级协程;比如在跨机器通信场景下 面,Erlang的解决方案简单的惊人;比如在不想选择C/C++的情况下,还有类似高效的Erlang/Golang可用等等;主要是提升视野。

  在本阶段里面,会除了基本的LNMP技能之外,会考虑一些其他领域知识的学习,这些都是可以的,看个人兴趣和长期的目标方向。目前情况能够选择的领 域比较多,比如、云计算(分布式存储、分布式计算、虚拟机等),机器学习(数据挖掘、模式识别等,应用到统计、个性化推荐),自然语言处理(中文分词 等),搜索引擎技术、图形图像、语音识别等等。除了这些高大上的,也有很多偏工程方面可以学习的地方,比如高性能系统、移动开发 (Android/IOS)、计算机安全、嵌入式系统、硬件等方向。

  系统设计在第二阶段的基础之上,能够应用掌握的经验技能,设计出比较复杂的中大型系统,能够解决大部分线上的各种复杂系统的问题,完成类似 浏览 器 - CDN - 负载均衡 -接入层 - Nginx+PHP - 业务缓存 - 数据 库 - 各复杂后端RPC交互(存储后端、逻辑后端、反作弊后端、外部服务) - 更多后端 酱紫的复杂业务;能够支撑每千万到数 亿流量网站的正常开发工作。

  1 有自己的github项目,目前致力于瓦力:meolu/walle-web · GitHub,瓦尔登:meolu/walden · GitHub变得更实用,欢迎标星:)

  3 写一个MVC,只有自己写一个完整的MVC才会真正开始理解PHP,理解设计模式,面向对象开发

  4 开发PHP扩展(曾写过一个ip2city服务meolu/ip2city · GitHub)

  数据结构是基础,但php语言,这方面就不考虑了。要写出一些优雅,可拓展性强的代码,设计模式是一门必修课。平时可能也会用到一些模式,但是会没有系统,也达不到交流的要求。不管是java,c++,php还是js,思想是一样的,任意哪种语言的实现都是可以的。

  深入php的前提是你已经完成了相当的项目,对php的特性理解程度比较深。之后在socket编程这块花一些时间,写一些c/s应用。因为网络的大部分应用现在几乎都是基于套接字之上,而php正是一门web语言。

  php底层调用的都是c模块,这也是它速度变慢的原因,php只是一个中间件。到语言层面的话,试着开发php扩展已完善现有的功能或是项目需求。

  推荐进入linux的学习,对了解系统层的帮助很大。看完《unix高级编程》和《unix编程艺术》,会有一览众山小的感觉。

  学习一样技能,你得先清楚这项技能是到底做什么的,说到这里,我想大家都会简单的说是做网站的,因为PHP在WEB领域应用最为广泛,大多数网站都是用PHP做的。准确的说PHP是做网站的后端开发的,其实我这样说还不算正确,PHP只是做后端开发的,但不只是网站而已。就像现在比较火的APP开发也可以用PHP做后端处理。

  PHP相对于其他语言,比较简单,相对好上手,比较适合零基础的人学习,但是就像我说的那样,PHP只完成了一个网站或者系统的一部分。

  一个运行的网站或者软件系统可以分为前端页面,后端程序,数据库,linux。而处理后端的PHP仅仅是只占了四分之一,PHP本身的东西其实并不多,真正多的东西都在PHP之外,所以单纯的掌握PHP并不足已做出什么产品,可能连工作都找不到。

  但凡是一个网站都必须得让人能看得见,使用得起来。任何一个网站可以没有数据库,可以没有后端程序,但是必须得有前端页面,而这也是最早期的网站形态—一 一个只能展示文字和图片等信息的静态页面。

  掌握静态网页的制作技术是学习开发网站的先决条件。这里面的学习包括 HTML,css,javascript,它们可以直接使用浏览器运行。

  HTML负责网页的结构,用它来网页排版中哪部分是文字,哪部分可以放图片,音频文件,视频文件放在网页中什么显示等。

  CSS可以把这些文字,图片,视频等信息拥有一定的合理好看的样式,可以定义文字的大小,颜色,图片的大小等等。

  javascript可以让网页与人产生交互,就像你登录网站,点击登录按钮就会跳转,把鼠标放到菜单,菜单就会自动展示下拉,逛淘宝时,把鼠标放在产品图片上,图片就会放大等等。

  我算是零基础学习开发的吧,连大学都没上,没系统的学过计算机专业,初次开始学习html时,我是以w3c手册为学习教材,但是越往后看越觉得里面写的东西琐碎繁多,手册里介绍了很多标签,标签又有很多属性,它们各自又代表的什么含义。

  就像下面的这个表示表格的一些标签,这是手册给出的概念,看了之后似乎也明白又不太明白,看完又没记住,回想起来,还是一头雾水,像是什么也没学到。

  那时我开始心急了,我无法想象我居然连基础的东西都都学不会,思量了一两天,我觉得我还是太浮躁了,我决定重新开始,动手敲敲试试,以前只是光看。就这样开始后,仿照别人家写的,运行一下看看浏览器显示的是什么效果,去掉某个属性之后看看是什么反应。我就这样笨拙的进行着,把每一个标签,每一个属性都敲了一遍,一个个的看到效果之后,我才理解手册里描述的概念是怎么回事了。

  前端的知识比较锁碎,没有太多逻辑性可言。其中html和css的任何元素标记都要亲自动手实践,大部分新手之所以觉得难学,看不懂手册概念,主要是学习方法不对,“懒”是首要原因,因为不动手实践,光看概念是没什么用的。

  关于html和css中的标签和属性你没必要完全一个不差的记住,因为这没有太大的意义,等你做了一个小项目之后,你只需要记住常用的就行,其他的做到有印象,用的时候能想到,然后查手册即可。

  当你学完之后一定要做一个简单的小项目,你学习时针对的都是散乱的知识点,最后要把这些东西整体的用一遍。

  严肃说来,HTML是否被认为是“真正”的编程语言并不重要——它依然是一种需要学习的新技能。尝试新的东西常的。你需要在处于这种未知的弱势地位时也敢往直前,不要急头急脑一下子就想把东会,要沉得住气,踏踏实实的心态一点一点的来,而且失败和不确定也没有关系—— 事实上,它们都是成功的重要组成部分。

  因为很多人都说不用学js了,直接学jquery(简称jq)就行。jq是什么,jq是一种js的框架,它可以使开发速度更快,有很多做好的功能和特效,直接使用就行了。

  但我并不同意光学jq,如果你想让自己能解决更复杂的问题,变得更有竞争力,或者只仅仅能更好的学习理解使用jq。那么请学习js!

  说了jq是js的一种框架,它的本质还是js写的。js能完成的,理论上来说jq也能完成,但是并不是100%都能处理,而且jquery能做的,js 100%能完成。jquery只是工具简化操作,底层还是js。只有在学好原生js的基础上,才能更好的学习jquery或其它框架和处理前端问题。

  到这里才说到我们的PHP。如果说HTML和css是看得见的部分,那么PHP就是看不见的部分。它负责在后面处理数据,然后返回给用户。

  当网站由开始的静态页面发展到现在有了后端程序,那么网站才有了业务逻辑。简单的说,就像一台计算器,你在前端输入数据,然后点击提交,PHP给你处理运算,然后返回到前端,这时你就看到了结果。需要特别说明的是PHP并不能直接在浏览器中运行,它需要Apache支持,放在Apache服务器里面,然后用浏览器用访问,这个需要大家在学习过程中配置一下,非常简单。

  学习PHP我推荐韩顺平老师的《PHP从入门到精通》的视频教程,做PHP开发,包括有了解的同学可能都知道韩顺平老师,名气很大,它的这个教程几乎是每个PHP学子必看的精品教程。网上有很多这个教程的下载。其实韩老师不只是出了这一个教程,大家可以顺便搜一下每学网,每学网上有更多韩老师亲自做的其他教程。

  我学习PHP时,慢慢的随着的知识不断增多,不懂的问题也开始出现,刚开始时我就简单用脑子记着,想以后再解决。但是后来再回想,发现有一些竟然记不起来了,慢慢的,不懂的问题越积越多,我害怕遗忘掉我不想遗漏任何我没学会的地方,哪怕是一个暂时没细想,细想一下就能懂的简单问题。如果忘掉了,可能以后再也想不起来了,这对我来说是个很难弥补的损失,我是个完美主义者。

  我想起了学习html时的教训,还是不能懒!我建立了一个文本,专门记载我不懂的,难以理解的,还有暂时没有解决的种种问题,甚至是灵机一动偶然想到的问题,也都统统不拉的记下来。

  我希望大家在学习的过程中也能养成写记问题的习惯,好记性不如烂笔头么,因为学习过程中难免会碰到很多不懂的问题,但是你又不能一直等着这个问题解决,你需要继续前进,而时间久了,你可能就会遗忘掉。

  除了记问题,我还把老师讲的知识,用自己的话按自己的理解自己的话写下来,这就如同是跟别人讲一遍似得。记住,要用自己的话写,忘记老师的原话,这样别人的知识才会成你的。

  合理的“慢”,不是速度上的缺失,而恰是对“过快”的反思与矫正。慢是一种方法。尊重规律,沉下心来,追求质量,做起事来,严格有序,精益求精。

  千万不要只看教程和学知识点,最重要的是要实践,大多数人包括我,曾经都是跟别人学起来像是学会了,到了自己做的时候却很难进行下去。

  当你看完教程掌握了里面所述的内容后,可以按照老师讲的例子或者自己构思某个应用或者某个使用场景,然后从头写起。你会发现很多问题,也会加深对教程知识的理解。这样通过不断地和获取反馈,你的开底会很快提升。

  当网站技术再往后发展时,人们需要网站处理存放更多的数据,和满足现实生活中的业务逻辑,这时候数据库技术应用而生。

  数据库是什么,按字面的意思,数据库说白就是存放数据的地方,它可以是一段文字,一张图片或者一个文件的URL地址等等。比如,当你想浏览一篇文章时,你点击文章标题,这个请求会跳转到PHP文件那里,PHP再从数据库取出你想看的那篇文章。

  PHP和数据库是密不可分的,PHP后来在网站开发中更多的任务就变成了数据库了。数据库有很多种,准确的说咱的这个数据库是mysql数据库,只是因为php和mysql关系非常好,它们两个是完美的搭配。所以我们学习PHP开发学习的数据库就是MySQL数据库。

  该通过做一个小项目强化一下。比如去做一个文章或者商品管理系统,做做常用的增删改查。就像下面的添加这个商品功能页面,无非就是用PHP把前端用户填写的数据存放到数据库么。

  编程只会在最初的几天里是个有意思的事情,之后大多会出现厌烦厌学。所以兴趣并不能完全成为编程的动力。通过项目开发,你会发现更多的编程动力是生活中需要的实际需求和通过高强度高密度的学习和思考后解决需求后的强烈成就感。

  为什么?就说网站开发吧,比如你要做网站中的验证码功能,你需要动手自己从0开始写,同样的,写一个文件上传程序,你需要动手从0开始写。

  但是你忽略了一个问题,验证码,上传文件等等这些都是网站中几乎不可缺少的基本功能,每个网站都要用到,这时候你可以动手把这些常用的功能写好,然后封装起来,用的时候直接调用就行了,大大减少了代码的重复性,而这其实也就是框架了。

  先别说自己做一个框架,因为完成一个好的框架不是一项简单轻松的工作,而且更需要高的知识技术水平。所以我们要学习使用别人做好的专业的框架,大都说中小型公司都是使用的别人的框架,PHP常见的有thinkphp, ci, yii,我个人推荐学thinkphp,这个是国人做的,轻量级,学起来更容易些,使用的公司也比较多。

  当你学会了PHP,mysql的一些增删改查技术后,你可以尝试做一个简单的文章管理系统了,能发布,修改,和查看文章。

  但是,你试想一下,会不会遇到这样一个问题:当你查看一篇文章,MySQL需要从文章表中寻找你需要的那一篇取出来,此时你的文章已经很多了,比如有一百万篇,或者一千万篇时,mysql再从里面找一篇文章是不是越来越耗时了,平常文章量少的时候也许1秒钟就能打开一篇文章,此时可能需要十来秒,你愿意等吗?用户愿意等吗?就像新浪网,腾讯网这样的大型新闻网站,如果用户看一篇新闻需要等很长时间,那能行吗?

  可以再试想一下:一个人访问时,和大量的人访问时?当你一个人访问也许很快,但是大量的人访问,mysql要处理大量的请求,它是忙不过来的,mysql支持的请求数是有限的,这很容易理解吧。

  假如它一次只能处理100个请求,当超过100个人时,其他的用户是不是就要等着,这样速度又降下来了,如同举的新浪和腾讯网的例子,用户是等不了的。

  为什么要采用静态化,就是把数据库的数据生成一个文件,用户第一次访问时,mysql依然从数据库里面取,当第二次乃至以后更多次的访问时就直接访问这个静态文件了,不再劳烦数据库了,这样就减轻了服务器的压力了。

  我们的程序,数据库,整个网站终归都是放在linux系统的服务器上的,对于一般的程序员能做到基本的配置即可。基本命令、操作、启动、基本服务配置(包括rpm安装文件,各种服务配置等);会写简单的shell脚本和awk/sed 脚本命令等一般公司有相应的运维人员管理。如果对这个有兴趣,后期可以继续深挖。

  怎么又是数据库?,不是已经讲过了mysql了?是的,咱们说的mysql是关系型数据库,所以这两个叫做非关系型数据库。

  与mysql不同的是Redis和Memcached 的数据是放在内存中的,mysql是放在磁盘中的,而访问内存中的数据速度要远大于放在磁盘中,这就是它们的好处。

  因为:MySQL更适合海量存储数据,Redis和Memcached是在内存中的,需要很大的内存才行,而且放在内存中的数据也容易丢失,如果机器故障重启内存就了。

  一般互联网公司大都采用MySQL + Redis,或者 MySQL +Memcached的方式进行架构;Redis/Memcached都是基于内存的,所以它们的速度非常快,包括读和写都很快,一般用在一些高并发,大数据量访问的场景之下。

  说到最后,总之,学习PHP并不难,难的是一个体系。我写的总体比较基础,主要是针对一些刚入门学习的同学,在整体上给建立一个完整的知识体系。

  在这条上,可能尽管你如此努力,可还是会遇到你难以理解的问题。同样,我自己曾经连续半个月失眠,为了考虑那些棘手的问题。

  要想确切地掌握编程语言的每一个特质是不可能的——它们是野性难驯的猛兽,如果你认为编程是一种易于学习的简单技能,那可能就会南辕北辙。作为一个程序员,需要学习的东西是无限的,并且一种不能满足的持久遗憾感,即使是该领域的专家也时常会有。

  不用担心,知道了这些,把心态放正,一步一步的来。不要放弃,吸取知识是擅长它的第一步骤,一定要给自己信心,尝试用更多的方式去考虑一个问题。

  不要试图一下子掌握所有内容,设定那种如 “我要学习如何编写代码”这种不明确的目标——目标应该更具体,并将任务分解成更小的任务。

  我之所以不明白这一点,是因为我有一个创造性的大脑。而编程是逻辑性的,我的大脑只是不习惯这种思维方式!

  现在互联网应用的数据量越来越大,企业对数据库优化看的越来越重,同样也是面试必问项,答好了更是加分项。

  由于在知乎上回答关于sql优化方面的问题,因为有教学从业经验,内容又能很容易看懂,获得了不少人的认可和点评。所以最后,我又补充了很多干货,整理成了笔记,免费送,超过市面上各种培训机构该部分内容的质量,是个很好的补充。

  在 WEB 开发世界里,PHP 是最流行的语言之一,从 PHP 里,你能够很容易的找到你所需的脚本,遗憾的是,很少人会去用“最佳做法”去写一个 PHP 程序。这里,我们向大家介绍 PHP 的 10 种最佳实践,当然,每一种都是经过大师们证明而得出的。

  没有谁比 PHP 的创建者 Rasmus Lerdorf 明白 PHP 用在什么地方是更合理的,他于 1995 年发布了 PHP 这门语言,从那时起,PHP 就像燎原之火,烧遍了整个开发阵营,改变了互联网的世界。可是,Rasmus 并不是因此而创建 PHP 的。PHP 是为了解决 WEB 开发者的实际问题而诞生的。

  和许多开源项目一样,PHP 变得流行,流行的动机并不能用正常的哲学来进行解释,甚至流行得有些孤芳自赏。它完全可以作为一个案例,一个解决各种 Web 问题的工具需求所引起的案例,因此当 PHP 刚出现的时候,这种工具需求全部聚焦到 PHP 的身上。

  但是,你不能奢望 PHP 可以解决所有问题。Lerdorf 是第一个承认 PHP 只是一种工具的人,并且 PHP 也有很多力所不能及的情况。

  根据工作的不同来选择合适的工具。我跑了很多家公司,为了他们部署和使用 PHP,但是这并不意味着 PHP 对所有问题都适用。它只是可以一个解决大部分问题的 front-end 脚步语言。

  作为一个 web 开发者,尝试用 PHP 解决所有问题是不科学的,同时也会浪费你的时间。当 PHP 玩不转的时候,不要犹豫,属蛇的属相婚配表试用一下其他的语言吧。

  如果有人知道如何让网站的规模伸缩自如,这个人一定是 Matt Mullenweg。2006 年的时候 Matt 对 Wordpress 的数据结构进行了前瞻性的改进,并且解释了为什么 Wordpress MU 对每个 blog 使用的 MYSQL 表格, 而不是把所有的 blog 数据都塞进一个巨大的表格。

  我们测试过这个方法,但是发现如果要扩展它的伸缩性,代价太高。如果用一个整体的数据结构,在大流量面前,你将会面临服务器硬件的问题。在 MU 里面。用户们都被分布到的表格当中,并且可以轻易地组织起来。举个例子,WordPress.com把用户的数据分散存储到 4096 个数据库中,这些数据库可以分散大规模的数据访问,实现流量和压力分流。

  数据表的可迁移性让代码(blog)可以运行得更快,并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略, Matt 向人们展示了时下最流行的 Facebook 和Wordpress.com都可以在 PHP 下稳定运行,并且处理惊人的访问量。

  Dave 为 PHP 开发者提供了很多深谋远虑的,并总结成了《writing secure code in PHP》:千万不要相信你的用户,他们甚至可能会你。

  有一条 web 开发的基本原则,我重复多少遍都觉得不够,那就是:千万不要相信你的用户,同时要假设你网站中的每个数据单元都是从用户那里收集来的恶意代码。很多时候,你必须用 JAVAscript 在客户端检验表单提交过来的内容, 如果你习惯了如此,那么,这是一个好习惯。如果安全性对你来说很重要,这就是最重要最需要学习的原则。

  Dave 目前正致力于为它的《Writing Secure PHP》系列书籍整理实例,书的最后他说:

  最后,变得偏执一点吧。除非你认为你的站点永远不会受到,否则就正视所有的问题,当问题真正发生的时候,你的情况会变得很糟。你需要把每个用户都看成会带来一场攻防站的黑客,想尽一切办法来站点的安全,同时想好相应问题的解决方案。

  如果你拥有一个访问量很大,但更新并不频繁的站点(比如 blog,基于某种 CMS),或许它需要进行一些,这些不会花费太多的时间,但是对性能有突出的贡献。 如果要为一个复杂/更新频率很快的站点建立缓存机制,过程可能会很曲折,但是好处也是显而易见的。

  当 Chad Kieffer 从 UI 设计和数据库优化的工作中抽身出来的时候,他会在他的博客 2 tablespoons 上分享很多技术经验。由于 Chad 多方面的全面发展,他经常可以发现其他程序员不能发现的问题,并形成相关经验,尤其是他开发网站的方法。他参与了网站开发的各个环节,因此他的对于提高网站开发的大局观非常有用。

  紧凑的计划,长长的 to do lists 以及 deadlines 让开发人员非常。不过有些功能,比如 Eclipse Templates,可以有效减少编码的时间和出错的几率。

  通常来说,任何项目都可以自动化,自动化程度越高, 你完成项目的时间就越短。花时间来开发使用频率很高的框架和模板,将会节省你以后更多时间。同时,使用像 Eclipse and the PDT package 这样的 IDE,你会发现效率得到明显提高,IDE 可以自动闭合,补全分号并且可以在本地 debug。

  或许 Joey Sochacki 并不像 Matt Mullenweg 那样有名 ,但他也是一个经验丰富的开发者,并且通过他的博客 Devolio 分享了很多技术经验

  Joey 发现在编写 php 代码的过程中有很多地方需要进行过滤,但却并没有太多的 coder 关注 php 的内置过滤函数。

  过滤数据是我们经常需要做的事情,但是很多功能丰富的 PHP 内置过滤函数却不为人知。使用类似 filter_* 的 PHP 内置函数,我们几乎可以处理所有的过滤任务,包括数据类型验证/URL/email 和 IP 地址验证/特殊字符处理等等。

  过滤是一件复杂的事情,但是我相信 joey 的发现会给你很多,让你认识到 PHP 强大的过滤功能。

  对于是否应该使用 Zend, CakePHP, Code Igniter, 或者其他 PHP 框架,一直存在着很多争议,但是在 web 开发者的心中,他们有自己衡量的标准。

  Josh Sharp 自己创建了一家提供面包和黄油服务的网站,因此他对于使用 PHP 框架来开发网站有一定的经验。他认为使用一个 PHP 框架来进行项目开发(use a PHP framework ),可以有效地节省时间,并且减少出错的几率。为什么?因为他觉得 PHP 实在是太好上手了。

  PHP 的易于使用有时候也有缺陷,因为并不严格的语法,经常会导致很多错误代码的诞生。但如果使用一个 PHP 框架,出错的几率就会大大减少。

  Herrington 推荐使用批处理和 Cron 来代替那些可以运行在后台的程序脚步,Web 用户并不愿意在线等待你的处理过程,所以有些事情更适合放到后台来处理。

  诚然,在某些情况下,这有点大材小用了,但是你可以清楚地看到,使用 Cron, MySQL, PHP 面向对象的方法以及 Pear::DB 这些便捷的工具来创建一个批处理工具并不是一件复杂的事情。

  Jack 认为使用 cron, PHP 和 MySQL 在后台处理一些任务,比起多进程的业务逻辑要划算得多。

  两种方法我都尝试过,我认为 Cron 非常符合”Keep It Simple, Stupid” (KISS) 的原则,它让后台处理变得简单。与多进程的业务逻辑相比,它没有内存溢出的风险。你可以创建一个简单的批处理脚本,并且在 cron 中运行,这个脚本会定时检查是否有任务需要处理,处理完之后就会自动退出,因此你不用担心是否有进程卡壳,或者陷入死循环。

  我告诉人们,最重要的事情就是最大程度地 PHP 的错误报告,为什么?因为 PHP 可能会隐藏很多小问题:

  使用了未定义的常量这些因素看起来并不是什么大事,除非你在使用面向对象的方法编写一些类库。通常,关闭错误报告将可能使你付出更大的成本来你的代码。

  错误报告可以帮你轻易地找到代码的问题所在,如果错误报告的等级够高,细微的错误都能被立即发现,帮助你节省整体 debug 的时间。

  从自己的一些切身经历,开始说起吧。刚开始的PHP程序员从业都会从内容管理系统,企业网站开始。HTML静态页面,JS特效是必须的技能。也许有很多的Java程序员不太能理解,甚至有人在怀疑,PHP是前端语言,不是服务端脚本语言。在一些二三线城市中,项目都比较小,而且都是希望完成,没什么分工的,PHP程序员都是从台前到幕后的。后面有机会在公司中接触到大的项目,对PHP深入的运用,发现其实PHP还是很强大的,可以用PHP自带的函数实现很多功能,可以装不同的扩展实现很多软件的应用。但到后来去学习Linux就发现,其实自己作为PHP程序员还是很狭隘的,发现PHP程序员可以走的很远,而不止是在企业网站。这一切都是在不断地壮大自己,经历了这一些。现在也回顾下,也是说说自己的看法。如何成为一个PHP程序员?

  1、先了解一下PHP是什么?PHP能做什么?你为什么选择PHP程序员这样一个行业?你想用PHP做什么?先自己想清楚以后是不是想长期做PHP程序员,因为你要是不长期写代码,去,去解决问题,去积累,你是不可能有什么成就的。这不是一个投机的事,投机也只会什么没学到,浪费时间。

  2、用集成安装PHP,一定要记住这一点,不要自己分开去装,尤其是自学的朋友。不然你会觉得很复杂,会没有信心学下去的。也要注意任何高手都不是一蹴而就的,是一步一步,不同的阶段历练才有最后的沉淀。

  3、先了解一些PHP基本的变量类型,语法,函数,基本逻辑,写简单的代码。前期以尝试,培养兴趣为主。这段时间是打基础很好的时候,这个会影响你后面的发展,不过也可以在后期去完善。

  4、这时候你可能觉得PHP就这样,没什么难度,或者有的觉得太难了,简直一脸疑惑,这个到底有什么用?在这时候一定要下来,可以试试先放一下,别太较真,慢慢的困惑你的会被你的。学习html+css+js,缓解自己的压力,这个相对简单,建立信心。尤其是js,总结其实和PHP有相同的思,可以结合着一起体会。

  5、这些都感觉有80%了解就可以先放放了,现在再学习MySQL,也是先了解MySQL基础的,MySQL是干什么的,我可以用它做什么?因为之前装的集成。为什么感觉是学习的过程很凌乱?我想告诉你的是,一是不要在自己没能力解决问题的时候死磕,浪费时间,信心。这时候我们应该做的是学习壮大自己,不要灰心。二是我本来觉得前端、MySQL数据库、PHP编程都了解才是完整的,这才是一个合格的PHP程序员。

  6、这一切都顺利的话,你基本离预设的目标不远了,完成了整个学习的70%了,后面的是在之前的学过的知识点上。把HTML和CSS、JS结合、静态文件和PHP结合、PHP和MySQL结合。这个阶段可能越到的问题会异常的多,一定要学会解决问题。网上很多都是答案,同样你要学会问问题。

  7、这些之后你基本已经快到学习的尾声了,但还缺少经验。这时,你可以看一些网上开源的CMS,例如织梦,国内用的多,越到问题好解决。看看一些视频(网上免费的很多),查漏补缺,总结归纳形成自己的知识体系。是时候该准备庆祝下自己这段的时间没有白费(一般2到3各月,看平时每天花的时间),基本成为一个合格的PHP程序员了。也该恭喜你了,其实作为一个PHP程序员并不那么难。,;努力,努力;学习,学习。

  8、可以去准备再招聘网站上看看大部分公司的就职需求,再准备下自己还不会的知识点就可以了。刚开始选择小一点的公司,可能要求会的比较多,但一般都不需要你很精通,这段时间还是还是以虚心学习为主。小公司会让你面更广阔,大公司会让你更专注,技术更拔尖。后面的各个人的高度就看自己的造化了。

  以上不一定按你学习的进度顺序,可以自己灵活调整,我只是把PHP整个学习的时间段分成几个重要点,几个常见的阶段。可能带有强烈的个人经历,但也是一些意见和。希望给一些迷茫,还在努力的或者想放弃的一些帮助。总结下,合格的PHPer应该是会静态网页,PHP编程,熟悉数据库的。

  以前我总是觉得你把php学到极致,你会是个高手,可是我现在的想法渐渐有点变了,你要设计好整个程序的架构,可管控,可扩展,当然不仅仅是程序,db,cache等等

  本人不是高手,但我学习的过程是这样的,先搞好基础语法,接着分模块功能实现,学习smarty,尝试做几个小项目,接着看流行的cms的源码,看多了,就尝试自己写一个,接下来就是看各种流行框架了,先学会用,最后试着自己写一个(能写一个的话,本人觉得就是高手了,本人还是停留在写cms的水平),其中看cms源码跟学框架可以同时进行,因为有一些cms直接就是框架实现的。

  会用PHP写几个项目之后,更多地会去了解支撑其运行的背后架构,那些东西才是“进阶知识”;当你对背后架构有一定了解后,会发现算法与数据结构才是真正的核心

  要想成为一个php高手,首先得成为一个编程高手,要成为一个编程高手,那么至少对(编译,线程,设计模式,数据结构)有不错的了解和理解。(喜欢喷php用不上数据结构和设计模式的人勿喷,对此我统一回复呵呵~)。掌握了基础知识之后就得大量的工程锻炼了,写很多项目,然后就成为高手了。

  1、数据存储,像MySQL 存储引擎那块。nosql 等,主要看数据的落地啊,缓存啊,还有数据锁。这些方面一般都在这些里面就会涉及。

  2、php内核,因为只有你了解他的运行原理你才能说你真正懂这门语言了。当然最好是自己去看源码。这样对自己提升更大。前提是你要会c或者c--

  4、别发时间纠结在那些框架上,多出去走走泡泡妹子。身体是的本钱。我估计着你做完的肯定还是单身 。

  

关键词:php学习
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: