zoukankan      html  css  js  c++  java
  • php和js的比较

       一直以来,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学了。

  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427168.html
Copyright © 2011-2022 走看看