php发展到现在,也有了面向对象的概念,也出现了laravel这样的框架,有了完整的mvc模式,为什么依然会被认为是前端语言?和java相比只是效率和可靠程度的差异吗?
回复内容:一开始邀请我回答这个问题的时候,我是拒绝的。
一方面,php在一个业务系统里如何定位,要看你这个系统的实际情况,目前我这后端还是js呢。对于网络游戏来说,c加加还是前端呢。
另一方面,前后端的定义,发展到现在已经很不一样了。从前在网线两头分开前后端的做法已经不适合了。现在我们更倾向把路由处理、request/response 这些都算作前端,有点类似java里面的action。从service开始,到dao,就可以算是概念上的后端了。
那么问题来了,php到底算什么呢?
那就是看你用php来做什么了。
谢谢看到这,其实上面的都不是我想说的。
duang!
其实吧,一个有点规模的业务系统,会逐渐拆分为一个个逻辑单子化的小系统,这些子系统各自分担一些事情,有些是php,有些是java,有些是c,python,多和谐多美丽。有的在招呼客人,有的在端菜,有的在后厨。噗~
最后,php是世界上最好的语言,第二是js,第三不知道,第四阿森纳。php也分为面向前端的php和面向后端的php。
举个不太正确但很形象的例子:现在大多应用都是前后端分离,业务逻辑与数据存储的分离。面向前端的php要做的就是是前后端的分离,面向后端的php要做的就是业务逻辑和数据数据存储部分。
面向前端的phper除了需要熟练掌握php基础语法,类库,框架和对数据库的基本操作,还需要需要熟悉div+css,熟悉js。只有熟悉了前端的开发,才能更好的进行模板的渲染,更好的做到前后的分离,以及分离后前后端数据的交互。
反过来,前端程序员最好要懂一点后端,才能更好的进行前端开发。前端做的不仅仅是一个界面,还有对页面所收集的数据的初步处理。比如表单中的用户输入,至少需要格式处理然后才post或get给后端。再举个极端的例子,如果前端程序员完全不懂后端,甚至连中的name属性有什么用的都不清楚的话,那怎么能很好的做到前后端数据分离呢?
面向后端的phper则肯定得掌握环境的搭建,linux的基本使用,简单shell的编写,扩展的编写,并熟悉数据库,对数据库的设计和优化也是必须的。更深入就是对php源码和mysql源码的研究。
在实际运用中,一方面,一个网站ui的变动是相当频繁的,如果是基于传统的java开发方案,jsp tag lib,freemaker, velocity,这很难让前端去修改去调试。另一方面,由于和java相比,php在执行效率和性能上基本处于弱势。所以很多大型网站后台都不使单独用php来处理业务,而是采用php+java的架构。特别是对于有复杂的用户交互及高并发及后端还有复杂的业务的网站来说,如电商类网站,前端使用php,可以做到快速开发,部署不用重启,同时nginx + fastcgi + php的组合也能应对基本的高并发问题。后端的复杂业务处理(如订单处理,购物车,库存相关的)使用java来做则再合适不过了。于是,面向后端的php的任务,在很多大型网站中基本就交给java去做了。
所以这么来看,一些大的公司里面,phper去做前端的任务,一方面是公司网站架构就是前端使用php,对于一些“前端工程师”做的事情,让phper来做,那也是很正常的;另一方面,可能是phper功力还不够深厚,做不了面向后端的php。首先,部分赞同@蒋航 的回答。
其次,更清晰地讲 ——
完全的前后端分离 其实不用 php 参与前端,只需它提供基于 http 或 web socket 的数据接口即可 —— 前端自主控制 用户级的业务逻辑,加载 html、css、js、字体、图片等静态资源后,与后端只有数据交换(json、xml 或自定义数据结构)。这是 spa(单页应用)常用的模式,借鉴 原生网络客户端的架构。
现在大型网站如有 php 重新参与前端事务,主要因为性能考量 —— 减少网络连接数的同时,保障内容很多的网页在浏览器中的渲染效率~ 他们通常用后端语言生成 包含网页首屏内容的 html 代码、非首屏内容的 html 片段,首屏的渲染基本无异于传统 web,后续内容会以纯文本的形式缓存在隐藏 dom 中按需加载~
facebook 的 big pipe 和 阿里的 big render 是上述架构思想的较好实践,但后者的后端语言是 java。据我们社团部长在腾讯服务端部门的实习反馈,鹅厂的 php 用在各地镜像服务器与前端程序直接交互,而核心的业务逻辑、数据持久化则用 c++ 自主开发了 hammer 架构来支持。
所以,除了不同后端语言/技术各自特点会左右一家公司最初的选择 —— 用怎样的前后端架构并不注定由 php 去和前端配合完成,j2ee、m$.net、node.js、google go 都可以去做配合前端的事~
——————————————————————
个人赞同“前后端工程师都要了解对方的技术原理”,但不喜欢 phper 被夹在中间 —— 既不会掌控后端架构,又搞不出真正的前端工程,在哪端都是写比较一次性的“业务代码”……
前几天面试了一个应聘“前端工程师”的应届生,他在之前实习、转正的公司“用 jsp 写前端页面”,其职位名曰“前端开发工程师”,但是 —— 他说最近一个自己包办的私人 php 网站项目 最有收获的一点是“搞清了跨域问题”,可问了几句才发现他混淆了“iframe 跨页与跨域”,因为他都不能准确描述 域名与跨域的定义……
我在此不是讽刺别的程序猿,而是觉得中国计算机教育让很多程序猿一直在一些误区中工作着,让自己和用户都蛋疼着……
所以我的建议是 —— 保持对各种技术领域的好奇与了解,并在一定时期内专注于一个喜欢的领域~一切都只是”增删改查“
何必纠结
欢迎关注我的 initphp 让你的代码更简单....如果java 和php 两个语言混合开发 java是要负责数据,业务逻辑方面 php要做的应该是数据的调用,在这里应该是这个前端, php算前端,那html不是哭晕在厕所? 另外,一般是把php与jsp的概念搞混了。只要挣工资,c++也可以写前端。。php貌似没有人拿来在浏览器中运行吧。因为php是最好的语言。
补充php是做前端语言的么?我的理解前端是html+css+javascript对网页的渲染呀。
