在服务端使用PHP开发的时候,经常会将PHP、HTML、JS、CSS这些代码写在一起,尤其是将PHP代码混合在后三者之中(CSS比较少)。但是实际上在执行的时候,这几个部分是分别独立执行的。
PHP只能在服务端执行,在请求发出之后,服务器执行PHP脚本,对于PHP解释器来说,它只能看到和执行<?php ?>中间的那部分代码,在执行这部分代码之后,会生成请求需要的数据,有时候这些数据是一个json字符串,有时候这个东西就是一个包含HTML、JS、CSS这些代码的页面。
PHP生成JS代码就是这时候生成的,对于PHP解释器来说,那些JS代码和普通的字符串没有区别。
在这之后,服务器从PHP的缓冲区读出这些数据(比如一个包含了HTML、JS和CSS代码的页面),然后将这些数据打包发送给浏览器。浏览器内嵌了HTML、JS和CSS的解释程序,所以浏览器可以执行HTML、JS和CSS代码。同样的,因为浏览器没有PHP解释程序,所以浏览器是不能执行PHP代码的。
简单来说,就像是有这么一堵墙,墙的一边是浏览器,它能执行HTML、JS和CSS;墙的另一边是服务器,它能执行PHP;两者通过HTTP协议交互。对于浏览器来说,因为不认识PHP代码,所以就算给它一段PHP代码,对它来说也就是一堆普通的字符串。同样的,对于服务器来说,所谓HTML、JS和CSS代码跟“Hello,world”没有任何区别。
不管是JS还是PHP都可以生成任何形式的字符串,所以它们可以生成任何语言的代码。
再说远一点儿,如果没有程序去解释执行,任何代码都只是一堆字符串。