php js 比较,PHP与JS的比较

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学了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces Restore Cube(暴力枚举)

1 /*2 题意:给出立方体的每个顶点的坐标(是由源坐标三个数某几个数被交换之后得到的!), 3 问是否可以还原出一个立方体的坐标,注意这一句话:4 The numbers in the i-th output line…

php 非递归调用,php 无限分类(非递归)

/*** 无限分类* 2011/8/24* kcj* */include "../conn/conn.php";$flpid$_POST[flpid];$fltitle$_POST[title];$fldes$_POST[des];if(isset($_POST[action])!&&$_POST[action]"add"){ // 无限分类(非递归),用路径来判断分类归属(flidflp…

树状数组三种模型

树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0):(1)“改点求段”型,即对…

php实现直播答题系统,直播答题解决方案

概述即构提供直播答题一站式解决方案,包括 Windows 主播端、移动 APP 端示例源代码(iOS、Android)。1 下载/体验地址由于直播答题场景需要主播端(推流、发题)和观众端(拉流、答题)配合使用,因此开发者需要同时下载这两端的软件。下载后,具体的…

poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)

1 /*2 树状数组第三种模板&#xff08;改段求段&#xff09;不解释&#xff01; 不明白的点这里&#xff1a;here&#xff01;3 */4 #include<iostream>5 #include<cstring>6 #include<cstdio>7 #include<algorithm>8 #define N 1000059 us…

php路由类默认模块,微擎入口路由及其模块入口路由 - YangJunwei

一、微擎入口路由微擎有2个入口文件/web/index.php?csite&aentry/app/index.php?centry路由变量$controller $_GPC[c]; //web入口缺省值account&#xff0c;app入口home$action $_GPC[a]; //index.php入口文件开头$acl变量可配置默认方法$do $_GPC[do];不管$action是什…

matlab subs 慢,求助matlab程序计算速度过慢的原因

程序代码如下function [length]contactlength(x0)if x0>50||x0error:数据超出尺寸范围elsesyms xR300;%非球面顶点曲率半径c1/R;delta0.1;k-3.3;%非球面参数rb27;%半径y(-1*c*x.^2)./(1sqrt(1-(1k)*(c^2)*x.^2));dydiff(y);dy2diff(y,2);dyx0subs(dy,x0);dy2x0subs(dy2,x0);…

matlab r2010a教程,MATLAB教程R2010a(十二五)

第1章 基础准备及入门1.1 MATLAB的安装和工具包选择1.2 Desktop操作桌面的启动1.2.1 MATLAB的启动1.2.2 Desktop操作桌面简介1.3 Command Window运行入门1.3.1 Commancl Winelow指令窗简介1.3.2 最简单的计算器使用法1.3.3 数值、变量和表达式1.4 Command Window操作要旨1.4.1 …

java中解决组件重叠的问题(例如鼠标移动组件时)

java中解决组件覆盖的问题&#xff01; 有时候在移动组件的时候会出现两个组件覆盖的情况&#xff0c;但是你想让被覆盖的组件显示出来或者不被覆盖&#xff01;在设计GUI时已经可以定义组件的叠放次序了&#xff08;按摆放组件的先后顺序&#xff09;。 真正麻烦的是响应哪…

matlab桥梁受力计算公式,matlab桥梁计算

等级&#xff1a;文件 218KB格式 pdf内容简介 该文结合斜拉桥施工监控的工程实践&#xff0c;分析研究利用MATLAB 6&#xff0e;0神经网络算法&#xff0c;可实现模式识别和函数逼近&#xff0c;进行信号处理&#xff0c;利用人工智能进行自动控制及非线性预测等。斜拉桥智能施…

php自然排序法的比较过程,PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)...

本文实例讲述了PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;PHP中strnatcmp()函数使用"自然"算法来比较两个字符串(区分大小写)&#xff0c;通常在自然算法中&#xff0c;数字 2 小于数字 10。而…

2014 网选 5014 Number Sequence(异或)

1 /*2 题意&#xff1a;a, b两个序列&#xff0c;规定由[0, n]区间的数&#xff01;3 求 a[i] ^ b[i] 的和最大&#xff01; 4 5 思路&#xff1a;如果数字 n的二进制有x位&#xff0c; 那么一定存在一个数字m&#xff0c;使得n^m的所有二进制位6 都是1&am…

2014 网选 5007 Post Robot(暴力或者AC_自动机(有点小题大作了))

//暴力&#xff0c;从每一行的开始处开始寻找要查询的字符 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;char str[100005];int main(){while(gets(str)){for(int i0; str[i]; i)if(str[i]A){if(s…

java 如何放大动画图,Android仿微信图片放大动画

&#xff03;今年三月份直接上手做的android&#xff0c;代码写的不规范&#xff0c;有问题希望指出&#xff0c;谢谢(app数英)类似于微信 图片浏览的效果&#xff0c;我的做法是在两个activity A\B之间传递图片的位置信息思路&#xff1a;在activity A的list view上有一张图片…

2014 网选 5012 Dice(bfs模板)

1 /*2 题意&#xff1a;就是给定两个筛子&#xff0c;每个筛子上6个面&#xff0c;每个面的数字属于[1,6]&#xff0c; 且互不相同&#xff01;3 问a筛子最少经过按照题目规定的要求转动&#xff0c;达到和b筛子上下左右前后的数字相同&#xff01;4 5 思路&am…

matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究

研究与开发 现代计算机 2019.04 上 文章编号&#xff1a;1007-1423(2019)10-0031-05 DOI&#xff1a;10.3969/j.issn.1007-1423.2019.10.007 基于 DPI 和 BP 神经网络的 P2P 流量识别研究 万建伟&#xff0c;胡勇 (四川大学电子信息学院&#xff0c;成都 610021) 摘要&#xff…

2014 网选 5011 Game(Nim游戏,数学题)

/*题意&#xff1a;Nim游戏&#xff01; 思路&#xff1a;通过异或&#xff0c;判断将n个数表示成二进制的形式之后&#xff0c;是否对应位的数字1 的个数是偶数&#xff01; */ #include<iostream> using namespace std;int main(){int n, x, s;while(cin>>n){s…

汉诺塔实践python,Python练习题11:汉诺塔实践

在终端输出如下信息--python在终端输出如下信息--python ???????????????????????????????????????????????????????????????????????????????????????????????? 描述 练习一…

oracle授权只读用户,Oracle创建只读用户(账号)的方法

第一步&#xff1a;创建用户(需要使用有dba管理员权限的用户创建一个新的用户&#xff0c;比如system)create user 用户名 identified by 密码 default tablespace 表空间;第二步&#xff1a;赋连接权限grant connect to 用户名;grant Resource to 用户名;权限分类&#xff1a;…

java中图片文件的传输及显示(Socket以及ServerSocket演示)

//客户端部分 package testSix;import java.awt.Graphics; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.util.Iterator;import javax.imageio.ImageIO; import …