1楼

一直以来,php和js一样,都被视做脚本语言。的确,他们两者蛮像的。首先他们都是弱类型语言,定义变量的时候不需要指定某个具体类型,变量类型可以实现隐式转换。虽然很多人说这样会带来很多一些潜在的问题,但事实上,我并没有感到到这种潜在问题,相反的,他们带来的编程上的方便,的确让我感到了很大的自由。比起as3中动辙就需要加上.toString(),我太喜欢as2,js和php这样隐式转换的方式了。   其次呢,让我感觉他们很像的地方在于他们编程的核心,都可以看做是函数的调用。用函数来做mvc的model,然后在面向过程的语句中,把函数调出来,传入参数,返回需要的结果,或者直接进行了某些操作。当然了,这是他们的一些普通应用。现在已经越来越要求用oop的方式来实现编程了。怎么说呢,不论是以函数为核心实现model功能,还是以类为核心实现model功能,其实本质上是一样的。只是php的面向对象更像java,而js的面向对象更有自己的风格。不论类的实现表现有如何不同,实质上的应用还是一样的,定义类,通过构造函数实例化成对象,然后调用对象的方法去实现功能。和以函数为核心的编程思想,最大的不同在于代码的组织更系统。

但他们还是有些区别的。一个最大的区别在于php中的核心功能是用函数方式实现,而js是用对象的方法实现。举个简单的例子说吧,如果要取得一个字符串的长度,用js是这样写的,var length = str.length; 而php是用 $length = strlen(str);来实现。js是用"对象.属性"方法来取得,而php是用"函数(参数)"的方法来取得。这让我不由得想起了as1和as2的区别。在as1中,我们一般用"函数(参数)"的形式来取得想要的值,而到了as2,我们就习惯用"对象.属性"的方式取得值了。比较而言,as2中的方式比as1中要直观得多,很容易理解,写起来会觉得顺手得多。很明显,as2比起as1,当然是进步了很多。那么我想,同样做为脚本语言,js的内核是不是比php的内核要先进呢?记得在看《javascript高级程序设计》的时候,看到里面提到string.length的问题,很明显,这是对象.属性的格式,可是,string只是一个变量啊,它不是对象啊,变量可以直接有属性吗??其实是js的内核在解释这里的时候,会先判断一下结构,发现是在调用字符串型变量的属性,就会把字符串隐式地变成对象,相当于String(string).length,再然后调用这个对象的length属性返回来,只是这一切只在解释到这里时隐式地进行的。虽然表面看起来是在调用字符串变量的属性,其实仍然是在调用String对象的属性,对string这个字符串型变量则做为构造函数的参数进行了String类的实例化。我想as2的内核也一定是进行了如此的设计,才让as1的基于函数的模式进化到了as2中基于对象的模式了吧。我觉得这样的方法很好啊,为什么php没有把这种方法设计到php的内核中去呢??

另外还有一个很大的不同,在于变量的传值问题。在js中,变量的传值传递和传址传递是根据传递的对象的类型决定的,不能自己随心控制。具体来说,js中的基本类型,比如说字符型,数字型,布尔型都是用的传值方式,而复杂数据类型,比如对象型和数组型是采用的传址方式。这些都没办法自己控制的。所以在js的继承问题上,才有用for( in )的方式,把对象中的属性一项一项传给别一个对象的属性,来实现继承,在改变子类的时候,不影响超类(当然,有更好的方法,用call()方法)。这样是绕了多大一个圈子啊!相比而言,php的传值问题就强大多了,php中所有类型都可以自由控制其传值是传值还是传址,在变量前加上&就可以变成传址方式,不加&就是传值方式。这样,在传数组和对象的时候,真是太方便了。这点,js应该跟php学了。

php js 比较,PHP与JS的比较相关推荐

  1. Android 与 JS 的交互 以及 JS与Android 的交互

    Android与JS交互以及JS与Android 的交互 是通过WebView互相调用方法 对于Android调用JS代码的方法有2种: 通过WebView的loadUrl() 通过WebView的e ...

  2. webpack打开项目命令_配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境...

    前后端分离的项目开发中,我们有开发环境.测试环境.预生产环境和生产环境. 1.开发环境下调试接口的时候,一般都会有好几个接口地址(开发服务器上的,本地的,接口开发人员的,七七八八的接口地址),要根据情 ...

  3. Sea.js学习4——Sea.js的配置

    可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({// 别名配置 a ...

  4. 爬虫之JS的解析确定js的位置

    爬虫之JS的解析确定js的位置 对于前面人人网的案例( http://www.renren.com),我们知道了url地址中有部分参数,但是参数是如何生成的呢? 毫无疑问,参数肯定是js生成的,那么如 ...

  5. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  6. # vue.js 之 对vue.js基础理解

    vue.js 之 对vue.js基础理解 Vue构造器 1 . Vue.js是一个构造函数,编程中称之为构造器 2 . 每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3 ...

  7. js进阶 11-22/23 js如何实现选项卡

    js进阶 11-22/23 js如何实现选项卡 一.总结 一句话总结:通过索引把选项卡头的li标签和选项卡内容的div标签联系在一起,通过控制div标签的display属性可以实现选项卡的选项切换. ...

  8. console js刷新页面_Console.js使用说明

    本文仅先给使用console调试的FE同学,如果你还不知道console是什么,或者还停留在alert阶段,那就不要浪费时间了,say bay bay! 你是否试程序的过程中用过console.log ...

  9. 好程序员web前端分享js剪切板Clipboard.js 使用

    好程序员web前端分享js剪切板Clipboard.js 使用,clipboard.js是一个用来设置剪切板的库,小巧无依赖,但用法有点诡异,必须依赖一个DOM元素. 必须要与一个DOM元素相关联,并 ...

  10. JS文件中加载jquery.js(JS文件添加其他JS文件)

    最近有一个需求: 1.在一个html中只能引入一个JS文件 不能有JS代码和其他JS文件的引入 2.这个JS文件中 还要引入其他的JS文件 3.所有JS功能都写在这个JS文件中 这些代码用到了jque ...

最新文章

  1. QString与string的相互转换
  2. c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解
  3. 小米5x的Android,小米5X支持NFC功能吗? 小米5X有nfc吗
  4. java sql数组_Sql数组类型解决方案
  5. pytorch1.4+tensorboard不显示graph计算图的问题
  6. 南京农业大学计算机组成原理,2017年南京农业大学信息科学技术学院853计算机专业基础综合之计算机组成原理考研强化模拟题...
  7. maven-dependency-plugin插件的使用
  8. mac下直接下载xcode的地址
  9. PDF文件批量添加目录详细教程
  10. Lumerical官方案例、FDTD时域有限差分法仿真学习(五)——液晶(liquid crystal)
  11. 计算机写字板英语,写字板的英文是什么
  12. Webpack的基本使用
  13. wikioi 1219 骑士游历
  14. 数仓分层模型架构分享(3)
  15. Maya2019 XGen的Utility面板内容为空
  16. 安装和使用PyInstaller生成window的exe和Mac的执行文件
  17. python抓取小红书_小红书很难爬?最新爬取方法教给你啦~
  18. IDG刘雨坤:关于SaaS业务七点经验
  19. 华为网络工程师必备技术汇总
  20. opencv将坐标点按逆时针顺序存放

热门文章

  1. vue pdfjs 在线预览
  2. SpringBoot集成flowable-modeler(6.4.1) 实现免登
  3. 学习笔记之数据可视化(一)——项目适配方案
  4. 小程序开发(7)-之获取手机号、用户信息
  5. scara机器人dh参数表_两分钟带你了解机器人标定的因素
  6. system.argumentnullexception值不能为null_MySQL NULL 值如何处理?
  7. python request url 转义_Python爬虫入门笔记
  8. 符号库匹配不对的原因_中频点焊机焊接螺母有流渣是什么原因造成的?-苏州安嘉...
  9. BugkuCTF-MISC题宽带信息泄露
  10. html 随机出一个地址,nginx random_index 一直指向一个html页面,不会随机