其实很多人特别是新手,很难一开始去了解一个php工程师的知识结构是怎么样子的,我看到知乎上面一些回答还不错,做些整理备份:
1.掌握语言本身的语法,熟悉常用类库是必须的;
2.面向对象最为当今的主流也是必须掌握的;
3.常用设计模式必须掌握,设计模式是前辈的总结、经验;
4.php常与数据库配合使用,而且首先为mysql,所以mysql必须熟悉;
5.php是做为一种web开发语言而流行的,所以浏览器中的javascript必须会,虽然现在很多公司有专业的javascript工程师,但是php程序员js也是必须掌握的;
6.html/css必须会,不要求你会切会div+css,但是至少要知道,因为php是一种嵌入html中使用的语言(当然php也可以用于桌面等其他,但是和web(html)结合才是它流行的原因);
7.linux不需要会,会的话肯定更好,一般公司都有专门服务器管理人员的。但是你要会在vi下进行编程,这时候就不像在ide下那么好了,你应该尽量熟悉类库。
作为做了几年php开发的程序员我说下个人的看法:
1 如果是程序员的话,不管你是ruby、python、java、.net、c、c++,还是php,你可能都需要学习这些语言的基本知识,这个语言的函数库,或者是类库,那是越熟悉越好一.Linux方面
Linux常用命令
1. 文件处理命令
2. 权限管理命令
3. 帮助命令
4. 文件搜索命令
5. 压缩解压命令
6. 命令使用技巧
7. 文本编辑器Vim
掌握Linux常见命令操作,学会Linux基本使用,熟悉Linux下文本编辑器。
Linux系统管理
1. 软件包管理
2. 用户和用户组管理
3. 服务与进程管理
掌握Linux系统常见的系统管理操作。
Linux网络应用
1. 基本网络设置
2. 网络文件共享
掌握Linux系统常见的网络配置文件和命令,熟悉文件共享服务SSH、FTP。
LAMP环境编译及Apache配置
1. LAMP环境编译
2. Apache基本选项及应用案例
掌握源代码包编译构架LAMP环境,学会Apache的基本配置及典型互联网应用配置。
================================================================
二.对象的程序设计
面象对象的介绍
1. 类和对象之间的关系
2. 面向对象的程序设计
面向对象是PHP5中的新加功能,也是PHP以后编写代码的方式,掌握面向对象在行业中的应用,并了解一些基本的面向对象的声明语法。
如何抽象一个类
1. 类的声明
2. 成员属性
3. 成员方法
通过类实例化对象
1. 创建对象
2. 对象类型在内存中的分配
3. 对象中成员的访问
4. 特殊的对象引用“$this”
5. 构造方法与析构方法
掌握对象在程序中的应用,在内存中的分配形式,还要对象中的成员访问方式,并要掌握构造和析构以及关键字$this 使用。
封装性
1. 设置私有成员
2. 私有成员的访问
3. __set()、__get()、__isset()和__unset()
4. 四个方法
使用面向对象一定要使用他的三大特性,封装就是其中之一,掌握封装的意义以及封装的应用和各种与封装有关的魔术方法。
继承性
1. 类继承的应用
2. 访问类型控制
3. 子类中重载父类的方法
继承性也是面向对象的三大特性之一,需要掌握继承的意义与应用,访问控制和重载的方式。
常见的关键字和魔术方法
1. final关键字的应用
2. static和const关键字的使用
3. 克隆对象
4. 类中通用的方法__toString()
5. 通过__call()方法处理错误调用
6. 自动加载类
7. 对象串行化
在PHP的面向对象的程序设计中会用动一些常见的关键字和一些常用的魔术方法,需要全部掌握,并可以灵活运用。
抽象类与接口和多态
1. 抽象方法和抽象类
2. 接口技术
3. 多态性的应用
了解抽象类和接口的作用,并掌握他们的声明与应用,重点掌握多态性的应用。
与类和对象有关的系统函数
1. 与类有关的系统函数
2. 与对象有关的系统函数
PHP中提供的类和对象有关的函数不多,但比较常用
常用功能类的编写
1. 分页类
2. 验证码类
3. 图像处理类
4. 文件上传类
5. 数据验证类
通过这几个类的编写,不仅可以方便你在所有PHP项目中通用这些功能类,还可以对面向对象技术进行总结。
==============================================================
三.抽象层PDO
PDO所支持的数据库
1. PDO的应用及所支持的数据库
掌握PDO的应用原理和驱动设置,以及PDO的安装方法,并可以以多种方式创建PDO对象,和面要了解PDO对象中的成员。
创建PDO对象
1. 以多种方式调用构造方法
2. PDO对象中的成员方法
使用PDO对象
1. 调整PDO的行为属性
2. PDO处理PHP程序和数据库之间的数据类型转换
3. PDO的错误处理模式
4. 使用PDO执行SQL语句
需要掌握PHP中的各种属性的应用、设置和读取,以及PDO的错误处理模式,还需要了解通过PDO执行SQL语句。
PDO对预处理语句的支持
1. 了解PDOStatement对象
2. 准备语句
3. 绑定参数
4. 执行准备好的查询
5. 获取数据
PDO的预处理对象,可以完成PHP程序和数据库之间的各种操作。需要掌握如果使用PDO准备预处理语句,和绑定参数、执行准备好的语句,获取数据和大数据对象的存取,并可以使用PDO完成事务处理操作。
PDO的事务处理
PDO的事务处理方式
================================================================
四.脚本JavaScript
JavaScript语法
1. JavaScript应用概述
2. JavaScript脚本中变量与运算符
3. JavaScript流程控制和函数
4. JavaScript中数组和对象的创建及应用
可以完成JvavaScript的所有语法的学习,以及和HTML和CSS联合使用,并可以编写一些页面中常见的脚本程序。
DOM编程
1. DOM及DHTML的应用介绍
2. 各种事件及事件处理程序的应用
3. 窗口window对象的属性和方法
4. 文档document对象的应用
5. 其location、body、form、screen等对象的使用
学会页面中DOM的灵活应用、事件处理,还有各种DOM对象的属性和方法,以及网页中所有特效的编写。
================================================================
五.Ajax
Ajax的应用
1. Ajax概述
2. Ajax定义
3. 使用Ajax创建Ajax的引擎
4. Ajax Web应用模式(异步)
5. AJAX 开发中的应用
6. 编写和应用自定义的Ajax类
7. 使用Ajax完成XML的操作
8. 在Ajax应用Json技术
9. Ajax3.0的应用
要了解异步传递数据的方式,并掌握创建AJAX对象和应用AJAX对象中的属性和方法。
==================================================================
六.Ajax与JQuery框架应用
JQuery的使用
1. JQuery的概述
2. JQuery的核心方法
3. JQuery的选择器
4. JQuery的属性
5. JQuery的筛选和文档处理
6. JQuery的CSS应用
掌握在HTML文件中添加JQuery的应用,可以使用JQuery中的核心方法,以及常用选择器的使用,和一些常用的JQuery方法。
JQuery的Ajax应用
1. JQuery的事件
2. JQuery的效果
3. 使用JQuery中的AjAX应用
Ajax是JQuery重点实现的技术,掌握JQuery中的几种实现方法。
===============================================================
七.设计模式
MVC模式
1. MVC模式介绍
2. 视图
3. 控制器
4. 模型
5. 模块和操作
6. 主入口文件
7. MVC模式应用
需要掌握MVC的设计模式,包括视图、控制器、模型的应用。其他的设计模式最好也要会使用。
============================================================
八.代码规范
PHP编码规范
数据库规范设置
模板编写规范
1. 适用范围
2. 开发工具
3. PHP的文件格式
4. 注释规范
5. 空行和空白
6. 字符串的使用
7. 命名原则
8. 语言结构
9. 数表表的设计
10. 索引设计原则
11. SQL语句的设计
12. 模板设计规范
=============================================================
九.版本控制
1)、对计算机的理论需要有基本的了解, 对数据结构知识要熟练掌握。理解各种数据结构的特征,应用场景。能够和具体的工作联系起来。
2)、熟练掌握PHP语法,熟悉常用类库,对字符串库、正则库必须熟练掌握。
3)、理解、掌握常用设计模式,最好能研读一些通用的框架源码。
4)、对前端和后端知识都需要了解。掌握前端div+css+js,尤其是jquery框架。
5)、掌握php对mysql,memcache的常见操作和优化。
6)、熟悉常用的linux命令,能够写一些简单的shell脚本。
来自:Avazu Holding刘冉冉
PHP工程师知识体系结构
(2015-12-05)
知识结构:
1. PHP编程:变量、常量、字符串、数组、控制结构、数据库、类、继承、多态
2. MYSQL命令:INSERT、UPDATE、DELETE、SELECT、GROUP、COUNT、JOIN、索引
3. Linux命令:文件、权限、安装LAMP、nginx、Vim文件编辑、压缩解压、搜索
4. MVC框架:CodeIgniter、控制器、模型、视图、入口文件、类库
5. 前端:HTML、CSS、JS、DOM(window/document)、JQuery(选择器/方法)、Ajax、Json
6. 团队协作:SVN、GITHUB、API开发
7. 并发性能:Memcache、集群、资源服务器、AB并发测试与调优
8. WEB安全:SQL注入、验证码、刷新提交、漏洞扫描、DOS攻击、跨域攻击
9. 架构与部署:ECS、RDS、OCS、OSS、SLB
基础篇:PHP编程、MYSQL命令、Linux、MVC(CodeIgniter)、前端、团队协作
中级篇:并发性能、WEB安全
高级篇:架构设计、阿里云部署
在 WEB 开发世界里,PHP 是最流行的语言之一,从 PHP 里,你能够很容易的找到你所需的脚本,遗憾的是,很少人会去用“最佳做法”去写一个 PHP 程序。这里,我们向大家介绍 PHP 的 10 种最佳实践,当然,每一种都是经过大师们证明而得出的。
1. 在合适的时候使用 PHP – Rasmus Lerdorf
没有谁比 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 玩不转的时候,不要犹豫,试用一下其他的语言吧。
2. 使用多表存储提高规模伸缩性– Matt Mullenweg
没有人愿意质疑 Matt Mullenweg 在 PHP 方面的权威性,他开发了这个星球上最流行的blog 系统,(依靠一个强大的社区力量支持): WordPress. 创建 Wordpress 以后,Matt 和他的团队启动了 http://WordPress.com 平台,一个基于WordPress MU 的免费 blog 站点。现在,http://Wordpress.com 已经拥有大约 400 万用户,这些用户每天提供超过 140,000 篇的日志。
如果有人知道如何让网站的规模伸缩自如,这个人一定是 Matt Mullenweg。2006 年的时候 Matt 对 Wordpress 的数据结构进行了前瞻性的改进,并且解释了为什么 Wordpress MU 对每个 blog 使用独立的 MYSQL 表格, 而不是把所有的 blog 数据都塞进一个巨大的表格。
我们测试过这个方法,但是发现如果要扩展它的伸缩性,代价太高。如果用一个整体的数据结构,在大流量面前,你将会面临服务器硬件的问题。在 MU 里面。用户们都被分布到独立的表格当中,并且可以轻易地组织起来。举个例子,http://WordPress.com 把用户的数据分散存储到 4096个数据库中,这些数据库可以分散大规模的数据访问,实现流量和压力分流。
数据表的可迁移性让代码(blog)可以运行得更快,并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略, Matt 向人们展示了时下最流行的 Facebook 和 http://Wordpress.com 都可以在 PHP 下稳定运行,并且处理惊人的访问量。
3. 千万不要相信用户 – Dave Child
Dave Child 是 Added Bytes (previously http://ilovejackdaniels.com) 网站的核心人物,这个网站以他出色的《cheat sheets for many programming languages》而闻名。 Dave 为很多英国的公司服务,并且已经在编程世界里树立起相当的权威。
Dave 为 PHP 开发者提供了很多深谋远虑的建议,并总结成了《writingsecure code in PHP》:千万不要相信你的用户,他们甚至可能会伤害你。
有一条 web 开发的基本原则,我重复多少遍都觉得不够,那就是:千万不要相信你的用户,同时要假设你网站中的每个数据单元都是从用户那里收集来的恶意代码。很多时候,你必须用 JAVAscript 在客户端检验表单提交过来的内容, 如果你习惯了如此,那么,这是一个好习惯。如果安全性对你来说很重要,这就是最重要最需要学习的原则。
Dave 目前正致力于为它的《Writing Secure PHP》系列书籍整理实例,书的最后他说:
最后,变得偏执一点吧。除非你认为你的站点永远不会受到攻击,否则就正视所有的问题,当问题真正发生的时候,你的情况会变得很糟。你需要把每个用户都看成会带来一场攻防站的黑客,想尽一切办法来保护站点的安全,同时想好相应问题的解决方案。
4. 多使用 PHP 缓存 – Ben Balbo
Ben Balbo 开发了 Site Point,一个为 developers 和 designers 提供指导的网站。他是墨尔本PHP 开发和开源俱乐部的成员, 因此他对 PHP 有一定的了解,同时对 PHP caching 有一定的想法和经验。
如果你拥有一个访问量很大,但更新并不频繁的站点(比如 blog,基于某种 CMS),或许它需要进行一些改造,这些改造不会花费太多的时间,但是对性能有突出的贡献。如果要为一个复杂/更新频率很快的站点建立缓存机制,过程可能会很曲折,但是好处也是显而易见的。
PHP 缓存技术有很多种,Ben 为我们推荐了如下一些:
缓存函数的运行结果
设置过期时间
缓存 IE 下载的文件
模板缓存技术
Cache_Lite
由于 PHP 作为动态语言的特性,缓存机制对于更新频率并不快的站点来说非常重要。
5. 使用 IDE, Templates 和 Snippets 加速 PHP 开发 – Chad Kieffer
当 Chad Kieffer 从 UI 设计和数据库优化的工作中抽身出来的时候,他会在他的博客 2 tablespoons 上分享很多技术经验。由于Chad 多方面的全面发展,他经常可以发现其他程序员不能发现的问题,并形成相关经验,尤其是他开发网站的方法。他参与了网站开发的各个环节,因此他的建议对于提高网站开发的大局观非常有用。
Chad 认为使用 Eclipse PDT (Eclipse’s PHPdevelopment package) 这样的 IDE,同时使用一些模板技术和开源项目可以有效地提高 PHP 的开发速度。
紧凑的计划,长长的 to do lists 以及 deadlines 让开发人员非常苦闷。不过有些功能,比如 Eclipse Templates,可以有效减少编码的时间和出错的几率。
通常来说,任何项目都可以自动化,自动化程度越高, 你完成项目的时间就越短。花时间来开发使用频率很高的框架和模板,将会节省你以后更多时间。同时,使用像 Eclipse and the PDT package 这样的 IDE,你会发现效率得到明显提高,IDE 可以自动闭合,补全分号并且可以在本地 debug。
6. 利用好 PHP 的过滤函数 – Joey Sochacki
或许 Joey Sochacki 并不像 Matt Mullenweg 那样有名 ,但他也是一个经验丰富的开发者,并且通过他的博客 Devolio 分享了很多技术经验
Joey 发现在编写 php 代码的过程中有很多地方需要进行过滤,但却并没有太多的 coder 关注 php 的内置过滤函数。
过滤数据是我们经常需要做的事情,但是很多功能丰富的 PHP 内置过滤函数却不为人知。使用类似filter_* 的 PHP 内置函数,我们几乎可以处理所有的过滤任务,包括数据类型验证/URL/email 和 IP 地址验证/特殊字符处理等等。
过滤是一件复杂的事情,但是我相信 joey 的发现会给你很多启发,让你认识到 PHP 强大的过滤功能。
7. 使用 PHP 框架 – Josh Sharp
对于是否应该使用 Zend, CakePHP,Code Igniter, 或者其他 PHP 框架,一直存在着很多争议,但是在 web 开发者的心中,他们有自己衡量的标准。
Josh Sharp 自己创建了一家提供面包和黄油服务的网站,因此他对于使用 PHP 框架来开发网站有一定的经验。他认为使用一个PHP 框架来进行项目开发(use a PHPframework ),可以有效地节省时间,并且减少出错的几率。为什么?因为他觉得 PHP 实在是太好上手了。
PHP 的易于使用有时候也有缺陷,因为并不严格的语法,经常会导致很多错误代码的诞生。但如果使用一个 PHP 框架,出错的几率就会大大减少。
PHP 框架可以让你的代码结构更加规范,并且节省大量时间。
8. 不要使用 PHP 框架 – Rasmus Lerdorf
与 Josh 的观点恰恰相反,PHP 的鼻祖 Rasmus Lerdorf 却认为最好不要使用 PHP 框架,为什么?因为不基于框架的 PHP 性能更好。Rasmus 在 Drupalcon 2008的演讲上,用“Hello World”的例子来对比了一些框架 PHP 和简单 PHP 之间的性能,结果显示框架 PHP 的性能要远远落后。
9. 使用批处理 – Jack D. Herrington
Jack Herrington 对 PHP 世界并不陌生, 并且为大名鼎鼎的 IBM developerWorks 贡献过超过 30 篇的专搞,同时出版过《PHP Hacks》的书,因此他是一个真正的专家。
Herrington 推荐使用批处理和 Cron 来代替那些可以运行在后台的程序脚步,Web 用户并不愿意在线等待你的处理过程,所以有些事情更适合放到后台来处理。
诚然,在某些情况下,这有点大材小用了,但是你可以清楚地看到,使用 Cron, MySQL, PHP 面向对象的方法以及Pear::DB 这些便捷的工具来创建一个批处理工具并不是一件复杂的事情。
Jack 认为使用 cron, PHP 和 MySQL 在后台处理一些任务,比起多进程的业务逻辑要划算得多。
两种方法我都尝试过,我认为 Cron 非常符合”Keep It Simple, Stupid” (KISS) 的原则,它让后台处理变得简单。与多进程的业务逻辑相比,它没有内存溢出的风险。你可以创建一个简单的批处理脚本,并且在 cron 中运行,这个脚本会定时检查是否有任务需要处理,处理完之后就会自动退出,因此你不用担心是否有进程卡壳,或者陷入死循环。
10. 及时启用错误报告 – David Cummings
David Cummings 有一个专门提供 CMS 软件服务的公司 ,并且获得过几次奖 ,他有非常丰富的 PHP 开发经验。David 曾经写过《two PHP tips he wished he’d learned in the beginning》,其中一点就是:及时启用错误报告,这会节省大量的时间。
我告诉人们,最重要的事情就是最大程度地开启PHP 的错误报告,为什么?因为 PHP 可能会隐藏很多小问题:
变量没有预定义
在代码片段中引用了不可用的变量
使用了未定义的常量这些因素看起来并不是什么大事,除非你在使用面向对象的方法编写一些类库。通常,关闭错误报告将可能使你付出更大的成本来维护你的代码。
错误报告可以帮你轻易地找到代码的问题所在,如果错误报告的等级够高,细微的错误都能被立即发现,帮助你节省整体 debug 的时间。
首先能自己搭建环境
Linux(Ubuntu/ArchLinux/CentOS), Apache/Nginx, MariaDB/MySQL, Redis/Memcached, MongoDB, PHP-FPM
所以写php的, 连linux都不会, 还是好好加油吧.
前端
除了基本的Html, css, js
接着是框架bootstrap或者foundation
之后是sass
再是grunt/gulp/npm script
再然后是es5, es6/es2015, 感觉最近几年, js在发神经, 既然已经说到了es2015, 像webpack, Tree-shaking, nodejs... 这些东东有兴趣的自己google百度
至于 jquery, 是个好工具, 但已经是老古董了.
前后端可以分离, 但把开发人员也分前后端, 我是觉得没这个必要了.
前后端只是各有侧重, 写个php不会前端, 还是好好加油吧.
数据库
写php的, 觉得写些简单的SQL语句, 如select, update, delete, insert, 是一件非常吃力的事, 那还是好好加油吧.
PHP
关于php要掌握的知识点, 前面的回答有很多. 这里主要要说的是学习的步骤, 就四步
1. 看官网, (最好看英文, 翻译都是二手货), 不用看全, 但要有整体概念, 用的时候能找到相应的资料
2. 代码规范, 极其重要, 好像竟然没人提, 推荐的规范是 psr-2 (PSR-2:Â Coding Style Guide)
3. 掌握一个框架, 建议laravel, symfony
4. 用Google(不是百度), 以下知识点是一些开胃菜, (作为一个合格php开发, 不会用Google, 还是好好加油吧)
- composer
- PHP-FIG — PHP Framework Interop Group 真心是个好东西啊
- GitHub - squizlabs/PHP_CodeSniffer: PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.
- PHPMD - PHP Mess Detector
- PHPUnit – The PHP Testing Framework
- PHP: The Right Way
Git
不废话了, 不会用的还是好好加油吧.
如果想做个普通程序员 你大学课程加上大家说的各方面技能 就足够了 你的思考圈子会被上级指定
如果你想出类拔萃 需要: