php中的数据类型分为引用类型和值类型吗?像C#

php中的数据类型分为引用类型和值类型吗?像C#,c#,php,value-type,reference-type,C#,Php,Value Type,Reference Type,在c#中,数据类型分为引用类型和值类型 然后在php中,数据类型仍然被划分为c# 我发现一件有趣的事 在大多数语言中,数组是引用类型 例如,在c#中: a和b都是[1,10,5] 但在php中,假设有以下代码: <?php $a=array(1,4,5); $b=$a; $a[1]=10; print_r($a); print_r($b); ?> 最后,a美元是(1,10,5),b美元是(1,4,5)。php中的数组似乎是值类型 那么谁能回答我的问题呢 php中的数据类型分为

在c#中,数据类型分为引用类型和值类型

然后在php中,数据类型仍然被划分为c#

我发现一件有趣的事

在大多数语言中,数组是引用类型

例如,在c#中:

a和b都是[1,10,5]

但在php中,假设有以下代码:

<?php
$a=array(1,4,5);
$b=$a;
$a[1]=10;
print_r($a);
print_r($b);
?> 

最后,a美元是(1,10,5),b美元是(1,4,5)。php中的数组似乎是值类型

那么谁能回答我的问题呢
php中的数据类型分为引用类型和值类型吗?

是的,基本上对象是引用类型,而其他所有内容都是值类型。然而,前者并不完全正确,最好用“指针类型”来描述

举个例子:

$a = new stdClass(); # <-- Obj1
$a->foo = 'foo';
$b = $a;
$b->foo = 'bar';
echo $b->foo; # outputs 'bar'
echo $a->foo; # outputs 'bar'
$a=new stdClass();#foo=‘foo’;
$b=$a;
$b->foo='bar';
回声$b->foo;#输出“bar”
回声$a->foo;#输出“bar”
正如您所看到的,似乎$a是通过引用传递的;但是,它实际上是正在传递的对象的标识符的副本。因此,更新属性会影响原始属性,但更新变量的值不会影响原始属性。这与真实的PHP参考的对比如下:

$c =& $a;
$c = new stdClass(); # <-- Obj2
$c->foo = 'foo';
echo $b->foo; # outputs 'bar'
echo $a->foo; # outputs 'foo'
$c=&a;
$c=新的stdClass();#foo=‘foo’;
回声$b->foo;#输出“bar”
回声$a->foo;#输出“foo”

在这里,我们创建了一个$a作为/in$c的“真实引用”。这意味着对$a的任何修改都将导致$c被修改,反之亦然。因此,当我们更新$c的值时,$a也会更新,并指向Obj2;同时,$b不受更改值的影响,如果您执行了
$b=&$a,则仍然指向Obj1

相反(在PHP中),您将使用$b引用$a,其行为类似于C#PHP中的数据类型分为引用类型和值类型,因此PHP中的数组类型可以被认为是值类型??是的,包括关联和非关联类型。
$c =& $a;
$c = new stdClass(); # <-- Obj2
$c->foo = 'foo';
echo $b->foo; # outputs 'bar'
echo $a->foo; # outputs 'foo'