2013-08-23 51 views
2

在c#中,數據類型分爲引用類型和值類型。php中的數據類型是否分爲引用類型和值類型?像C#

然後在PHP,數據類型仍劃分爲c#?

我覺得很有意思。

陣列是在大多數語言的引用類型。

例如,在C#:

int[] a ={1,4,5}; 
    int[] b = a; 
    a[1] = 10; 
    print(a); 
    print(b) 

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中的數據類型分爲引用類型和價值類型?

+0

,如果你做了'$ B = & $a;',而不是(在PHP),你會引用$ a的$ B,它會表現得像C#[查看手冊頁(http://www.php.net/ manual/en/language.references.php) – Dale

+0

php中的數據類型是否分類爲引用類型和值類型 –

回答

2

是的,essentialy對象被聲明爲引用類型,而其他所有是值類型。然而,前者並不完全正確,可能會更好地描述爲「指針類型」。

舉個例子:

$a = new stdClass(); # <-- Obj1 
$a->foo = 'foo'; 
$b = $a; 
$b->foo = 'bar'; 
echo $b->foo; # outputs 'bar' 
echo $a->foo; # outputs 'bar' 

正如你可以看到,它似乎是一個$正在通過引用傳遞;但是,它實際上是正在傳遞的該對象的標識符的副本。因此,更新財產會影響原來的,但在更新變量的值不會。這與真實的PHP參考對比如下:

$c =& $a; 
$c = new stdClass(); # <-- Obj2 
$c->foo = 'foo'; 
echo $b->foo; # outputs 'bar' 
echo $a->foo; # outputs 'foo' 

這裏我們創建一個「真實的參考」$ a as/in $ c。這意味着對$ a的任何修改都會導致$ c被修改,反之亦然。因此,當我們更新$ C的價值 $ A也被更新,並指向OBJ2;同時$ b不受修改的值的影響,仍然指向Obj1

+0

因此,PHP中的數組類型可以被認爲是值類型? –

+0

是的,無論是聯想還是非聯想。 – vollie