[转载]php 数组 类对象 值传递 引用传递 区别

一般的数据类型(int, float, bool)不做这方面的解说了

这里详细介绍一下数组和的类的对象作为参数进行值传递的区别

数组值传递

实例代码:

<?php

function main() {
        $cc = array(
            ‘a‘,‘b‘
        );
        change($cc);
        var_dump($cc);
        die;
}
function change($cc){
        $cc = array(‘dd‘);
}
main();
?>

  output:

  array(2) {

    [0]=>

    string(1) "a"

    [1]=>

    string(1) "b"

  }

数组引用传递

<?php

function main() {
        $cc = array(
            ‘a‘,‘b‘
        );
        change($cc);
        var_dump($cc);
        die;
}
function change(&$cc){
        $cc = array(‘dd‘);
}
main();
?>
outpout:
array(1) {
  [0]=>
  string(2) "dd"
}

类对象值传递 

<?php
class pp{
        public $ss = 0;
}
function main() {
        $p = new pp();
        change($p);
        var_dump($p);
        die;
}
function change($p){
        $p->ss = 10;
}
main();
?>
output:
object(pp)#1 (1) {
  ["ss"]=>
  int(10)
}

类对象引用传递

<?php
class pp{
        public $ss = 0;
}
function main() {
        $p = new pp();
        change($p);
        var_dump($p);
        die;
}
function change(&$p){
        $p->ss = 10;
}
main();
?>
object(pp)#1 (1) {
  ["ss"]=>
  int(10)
}

总结:php中,数组是当一个普通变量,值传递是要一个实参的一个拷贝副本,跟实参无关,引用传递后可以改变实参的值
而类的对象是无论值传递和引用传递都是引用传递,是对对象的引用,都会改变实参的值

转自:http://www.cnblogs.com/zcy_soft/archive/2011/12/10/2283570.html

时间: 2024-08-07 19:05:57

[转载]php 数组 类对象 值传递 引用传递 区别的相关文章

C# 开发 &mdash;&mdash; 数组类对象接口

数组类型是从抽象基类 Array 派生的引用类型,通过new运算符创建数组并将数组元素初始化为他们的默认值 一维数组 type[] arrayname; 数组的长度不是声明的一部分,而且数组必须在访问前初始化. foreach 语句声明一个迭代变量 -- 是数组的每个元素的只读副本 二维数组 type[,]  arrayName; int[,] arr = new int[2,2]{{1,2},{3,4}}; 可使用数组的Rank属性和GetUpperBound方法获取数组的行数和列数,然后遍历

值传递 引用传递

方法参数传递有2种方式: 值传递和引用传递. 值传递: 默认都是值传递.值传递有2种,值类型和引用类型的.实质是复制栈中的值. 值类型的值传递:栈中的值就是实际值. 引用类型的值传递:栈中的值是内存堆中地址. 引用传递: 参数前加ref的为引用传递,引用传递有2种,值类型和引用类型的.实质就是传递自己本身,只是多了个别名.

值的引用传递、数组作为函数参数

按值传递(按副本传递): 给函数传递变元(参数)时,变元(参数)不会直接传递给函数,二十先制作变元(参数)值的副本,存储在栈上,再使这个副本可用于函数,而不是使用初始值. 例如: #include<stdio.h> void change(int); int main() { int num = 9; change(num); //将num = 9的值复制一份给change中的变量, printf("num = %d\n",num);//change中的值为副本, retu

理解---&gt;Java中的值传递&amp;引用传递

转自:https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247486882&idx=2&sn=0056f7c027b0db429650ea4df03985e5&chksm=ebd6328edca1bb9804927cb66bad1bb9d54e542bfea5b7ff9f9432603b919460ee601f12baf6&mpshare=1&scene=23&srcid=0113FJUlz

JavaScript——之对象参数的引用传递

今天碰到一个问题,怎样把参数变更影响到函数外部,如: <script> var myname = "wood"; A(myname); document.write(myname); function A(n) { n = "Yao"; } </script> 输出结果还是wood,说明当myname传入A函数后,在函数体内,相当于有一个myname的副本,这个副本的值等于myname,之后在函数体内对其做的操作是在这个副本上进行的. 但情况

php函数间的参数传递(值传递/引用传递)

php:函数间的参数传递 1.值传递 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> ------------------

c# 值传递 引用传递

以前一直误以为引用类型,在作为参数传递时,都是引用传递(类似于值传递中的ref),也就是说,把引用类型的变量作为参数传递给方法,在方法中修改该参数,会改变这个变量的值, 后来通过一些事例发现,上面的认识是片面的,引用类型传递实际上也是属于值传递的,只是引用类型传递的是一个堆地址. 先来个例子吧: using System; public class test{ public static void Main(){ testClass a = new testClass(); ChangeToNu

[转] c# 的传递参数值传递与传递引用的区别,ref与out区别

值传递 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效. 但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会修改对象的值,这种现象不能当做引用传递 引用传递 引用传递是对象本身传递给方法,当在方法中对对象做修改时,退出方法后修改是有效的,在C#中引用传递需要在参数类型前加关键字 ref ,但是ref 的参数变量在使用前必须被初使化,可有时通过引用传递的变量初值是没意义的,这容易产生混淆,这时在C#中有另一

深层次探究值类型与引用类型,以及值传递引用传递

数据类型 类型的分类 所有的类型都可以划分为两类:值类型和引用类型.   值类型和引用类型的区别在于使用的内存位置不同:值类型数据存储在栈上,而引用类型数据存储在堆上.(至于栈和堆就不在这里多做解释)   ①.值类型     值类型在储存时直接包含值,即变量引用的位置就是值在内存中实际存储的位置,可看做是变量的值本身.因此,将第一个变量的值赋给第二     个值会在新变量的位置创建原始变量的值的一个内存副本.相同值类型的第二个变量不能引用和第一个变量相同的内存地址.所以更改第一     个变量的