Home > Backend Development > PHP Tutorial > PHP函数 以引述方式传递数组

PHP函数 以引述方式传递数组

WBOY
Release: 2016-06-13 12:17:22
Original
923 people have browsed it

PHP函数 以引用方式传递数组

各位大神,《PHP从入门到精通》中,讲对数组变量按引用传递时,只是传递了数组首个元素的地址。因此退出函数后,只有对首个元素的修改是有效的。请看如下代码,整个数组中的所有元素都改了。为什么呢?


/**
* @author blog.anchen8.net
* @copyright 2015
*/

// TEST transmit the parameters by reference

function changeName(&$name)
{
    $name='Xiao HuiHui';
}
$girl='Mo';
echo '

调用函数之前,我的名字叫 :'.$girl;

changeName($girl);
echo'

调用函数之后,我的名字叫:'.$girl;


// Test transmit the array parameters by reference

function addPrice(&$price)
{
    $price[0]+=20;
    $price[1]+=30;
    $price[2]+=25;
}

function discount(&$price)
{
    foreach ($price as $key=> $aa)
    {
        $aa*=.8;
        $price[$key]*=.8;
    }
}

function priceSet(&$price)
{
       $price[0]=20;
    $price[1]=30;
    $price[2]=25;
}

echo '

';

$price_a=array(100,29,30);

echo'

 Before Discount the price is ';
var_dump($price_a);

discount($price_a);

echo '

 After Discount the price is ';
var_dump($price_a);

$price_a=array(100,29,30);
addPrice($price_a);
echo '

 After Add the price is ';
var_dump($price_a);


$price_a=array(100,29,30);
priceSet($price_a);
echo '

 After Set the price is ';
var_dump($price_a);


echo '

';
function setInfo (&$people)
{
    $people['name']='MoMomo';
    $people['age']=20;
    $people['hobby']='reading';
}
$gril=array('name'=>'Xiao Mo MO','age'=>18,'hobby'=>'Studing');

echo '

 before called the function ,the value is ';
var_dump($gril);
setInfo($gril);
echo '

 after called the function ,the array value is ';
var_dump($gril);

?>

运行结果:
调用函数之前,我的名字叫 :Mo

调用函数之后,我的名字叫:Xiao HuiHui


Before Discount the price is array(3) { [0]=> int(100) [1]=> int(29) [2]=> int(30) } 

After Discount the price is array(3) { [0]=> float(80) [1]=> float(23.2) [2]=> float(24) } 

After Add the price is array(3) { [0]=> int(120) [1]=> int(59) [2]=> int(55) } 

After Set the price is array(3) { [0]=> int(20) [1]=> int(30) [2]=> int(25) } 


before called the function ,the value is array(3) { ["name"]=> string(10) "Xiao Mo MO" ["age"]=> int(18) ["hobby"]=> string(7) "Studing" } 

after called the function ,the array value is array(3) { ["name"]=> string(6) "MoMomo" ["age"]=> int(20) ["hobby"]=> string(7) "reading" } 
------解决思路----------------------
您不觉得那位作者太想当然了吗?
这种治学态度写的书能看吗?
------解决思路----------------------
《PHP从入门到精通》中,讲对数组变量按引用传递时,只是传递了数组首个元素的地址。因此退出函数后,只有对首个元素的修改是有效的。
紅色部分明顯是錯的。

看完書,實踐,驗證一下。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template