如何看待大公司将PHP作为前端语言?
同学去腾讯写PHP,但是实际上是在做一些前端的工作。
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对网页的渲染呀。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

在dcatadmin(laravel-admin)中如何实现自定义点击添加数据的表格功能在使用dcat...

Spring Boot简化了可靠,可扩展和生产就绪的Java应用的创建,从而彻底改变了Java开发。 它的“惯例惯例”方法(春季生态系统固有的惯例),最小化手动设置

Laravel计划任务运行无响应排查在使用Laravel的计划任务调度时,不少开发者会遇到这样的问题:schedule:run...
