发布于 1970-01-01 08:00
  • 7 个回答
    • 对于数组这种非普通类型(字符串,整型,布尔),你的赋值相当于地址拷贝,就是a、b占用了同一段地址。所以改了b,a也会变,本质上a、b就是一个东西。

      2022-11-29 19:08 回答
    • 这里这个回答比较详细,数组属于引用类型值,存储在堆中。https://www.zhihu.com/questio...

      2022-11-29 19:08 回答
    • 网上看到有人说,JS中赋值时,原始类型(比如字符串)是复制值,引用类型(比如关联数组)是复制引用.

      vara={"Client":"jQuery","Server":"PHP"};varb=JSON.stringify(a);//转成字符串后赋值a["New"]="Element";console.log(JSON.parse(b));//使用时转回关联数组(对象)//输出Object{Client="jQuery",Server="PHP"}IE8不支持JSON.parse和JSON.stringify,需要引入json2.js:http://www.json.org/js.htmlhttps://github.com/douglascrockford/JSON-js/blob/master/json2.jsIE9以下版本:<!--[ifltIE9]><scriptsrc="json2.js"></script><![endif]-->

      感觉JS数组没有PHP灵活,PHP支持用&声明引用赋值,PHP数组是"写时复制":

      echoround(memory_get_usage()/(1024*1024))."MB\n";//0MB$a=file('/home/eechen/note.txt',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);echoround(memory_get_usage()/(1024*1024))."MB\n";//9MB$b=$a;echoround(memory_get_usage()/(1024*1024))."MB\n";//9MB(赋值后内存没有变化)$b['new']='element';echoround(memory_get_usage()/(1024*1024))."MB\n";//14MB(修改后内存发生变化,即写时复制)

      特别地,PHP对象默认是引用赋值,而不是值复制:

      classfoo{public$bar='php';}$foo=newfoo();$tmp=$foo;$tmp->bar='sql';echo$foo->bar."\n";//输出sql

      PHP对象复制需要通过clone关键字来完成:
      http://php.net/clone

      2022-11-29 19:08 回答
    • 因为a跟b指向的都是同一个数组呀。

      2022-11-29 19:08 回答
    • 要想做到不改变,就先把对象转化成字符串,再转化回来对象,就是两个不同的对象了。直接用的话,其实就是一个。楼上已经给出正解。

      2022-11-29 19:08 回答
    • 这个是php和js的一个不同点,js对数组传递是引用的,但是php的是值传递

      2022-11-29 19:08 回答
    • js对数组传递是引用的

      2022-11-29 19:08 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有