技术开发 频道

PHP开发经典教程(Part 6):编写自定义函数

检查引用

    在没有提及“引用传递” 和“值传递”之间的区别的情况下,关于函数内部和外部的变量的任何讨论都是不完整的。到目前为止,你所看到的所有例子都涉及到通过“传值”方式(意味着变量的拷贝被传递给函数)来传递参数给函数,同时原变量保持不变。然而,PHP同样也允许你通过“引用”的方式来传递参数。意味着你传递原变量的一个引用而不是一个值给函数,同时让函数在引用上而不是拷贝上进行操作。 

    糊涂了吗?那么,用例子或许更容易理解。让我们以下面的代码开始:

<?php // create a variable $today = "Saturday"; // function to print the value of the variable function setDay($day) { $day = "Tuesday"; print "It is $day inside the function<br />"; } // call function setDay($today); // print the value of the variable print "It is $today outside the function"; ?>


    你之前已经看到过而且你已经知道输出结果会是什么了:

It is Tuesday inside the function
It is Saturday outside the function
    这是因为当函数getDay()被调用的时候,它将值“Saturday”传递给函数(“值传递”)。原变量保持不变;只有它的内容被发送到函数。然后函数对其内容进行操作(修改和显示它们)。现在,让我们看看“引用传递”如何工作的:
<?php 。 // create a variable $today = "Saturday"; // function to print the value of the variable function setDay(&$day) { $day = "Tuesday"; print "It is $day inside the function<br />"; } // call function setDay($today); // print the value of the variable print "It is $today outside the function"; ?>
    请注意,函数定义中的参数前的符号&。该符号告诉PHP使用变量引用而不是变量的值。当这个引用被传递给函数时,函数内部的代码对该引用进行操作,且修改原变量(引用所指向的变量) 而不是变量拷贝的内容。如果你试着在函数外部检索原变量的值,那么它返回修改后的值:
.
It is Tuesday inside the function
It is Tuesday outside the function
    现在你明白我为什么说不提及两种传递变量的方式而讨论变量是不完整的原因了吧。当然,这个也是全局关键字在函数内部所做的:使用引用以确保在函数内部对变量的修改也表现在外部。PHP手册上说得好 “当你将一个变量声明为全局变量$var时,实际上,你正在创建一个全局变量的引用”。 


    接下来我们对本次教程做个总结。这次,通过学习如何将PHP代码的部分提炼为可重用的函数,你已经朝更好的软件设计迈进了一大步。你现在知道如何通过允许函数接受不同的参数以及如何从函数获得一个(或多个)返回值来为你的函数增加灵活性。最后,你也已经学习了一点关于PHP如何处理函数内部和外部的变量的知识。 


    在第七章中,我将会向你们展示如何将相关函数组织成类,也会告诉你们所有关于PHP5对象模型中非常酷的新特征。你绝对不想错过!
0
相关文章