2011-03-01 58 views
0

請幫助我證明如果變量引用或副本的情況。PHP ::引用或複製(內部情況)?

案例1 - $ ARR複製或引用?:

class Ex1{ 
public static $var1=array(10=>'work', 20=>'home'); 
} 
$arr=Ex1::$var1; 

案例2 - $ ARR複製或引用?:

class Ex1{ 
    protected static $var1=array(10=>'work', 20=>'home'); 
    public static function getArr(){ 
     return self::$var1; 
     } 
    } 
    $arr=Ex1::getArr(); 

感謝, 優素福

+0

什麼?請多解釋一下? – Shoe 2011-03-01 11:35:58

回答

4

據我估計,它應該是一個拷貝。

class Ex1{ 
    public static $var1=array(10=>'work', 20=>'home'); 
} 

$arr=Ex1::$var1; 

var_dump($arr); 

$arr[15] = 'play'; 

var_dump($arr); 

$arr2=Ex1::$var1; 

var_dump($arr2); 

Ex1::$var1 = array(10=>'work', 15=>'asylum', 20=>'home'); 

$arr3=Ex1::$var1; 

var_dump($arr3); 

var_dump($arr2); 

array 
    10 => string 'work' (length=4) 
    20 => string 'home' (length=4) 

array 
    10 => string 'work' (length=4) 
    20 => string 'home' (length=4) 
    15 => string 'play' (length=4) 

array 
    10 => string 'work' (length=4) 
    20 => string 'home' (length=4) 

array 
    10 => string 'work' (length=4) 
    15 => string 'asylum' (length=6) 
    20 => string 'home' (length=4) 

array 
    10 => string 'work' (length=4) 
    20 => string 'home' (length=4) 
1

修改$arr然後var_dump(Ex1::getArr());和你會看到它是否是一個副本或參考。

編輯:沒有看到練習1 :: VAR1被保護

2

兩個副本。默認情況下,只有對象通過引用傳輸。

+0

我需要證明 – Yosef 2011-03-01 11:49:05

+0

@Yosef - 如果您需要證明,請嘗試運行我的示例代碼並相信您的眼睛向您展示的內容(對副本的更改不會影響原始值,反之亦然)......如果您需要一個數學級別的證明,那麼你最好閱讀PHP的實際源代碼,或詢問PHP的實際開發人員(並查看他們對你的請求的迴應)。但是__爲什麼你需要這個證明? – 2011-03-01 11:53:18

+0

對象也作爲副本發送 – Yosef 2011-03-01 11:53:40

0

這將是一個副本,測試它想:

$arr=Ex1::$var1; 
$arr['omg'] = 'lol'; 
var_dump($arr); 
var_dump(Ex1::$var1);