zoukankan      html  css  js  c++  java
  • (转)一步一步学习PHP(4)——函数

    相信每个人在学习PHP之前至少都有着一定的C语言,或者是C++/Java/C#等其他语言的基础,所以在这里也不从头开始说起,只是来谈谈PHP方法的独特之处。

    1. 解决作用域问题

    在上一节谈到了PHP中函数的作用域问题,如果说类还不够说明问题,那么在这篇文章中的作用域例子,也许对您更有说服力。

    那么,我们如何能在PHP的函数中访问外部的变量呢?

    在PHP中,存在一个概念叫做全局作用域,也就是说,如果你不使用函数(未来会有类的概念),那么你创建的变量可以在页面的任何地方访问。那么,我们怎么解决函数体内的问题呢?

    我们可以使用global关键字:

        <?php 
    $name="kym";
    function Test()
    {
    global $name;
    echo($name);
    }
    Test();
    ?>

    这样的话,我们就相当于得到了对全局变量$name的一个引用,而不需要重新创建一个$name变量了。

    在PHP手册中有这样一句话:使用全局变量等效于在$GLOBALS变量中创建一个对变量的引用。那么我们就可以模仿这个语义写出这样的代码:

        <?php 
    $name="kym";
    function Test()
    {
    $temp=&$GLOBALS["name"];
    echo($temp);
    }
    Test();
    ?>

    其实这两种是等效的代码。看上去这样使用变量很麻烦,但是这样其实避免了很多副作用的产生,如Java,C#是面向对象的语言,但是在PHP中,一切都在一个页面,甚至多个页面中,那么如果不使用这样的办法,很容易产生函数的副作用(误修改)。

    2. 默认参数

    第一次听过这个概念应该是在C++中,之后学了C#,就没有接触过这个概念了,不过个人还是非常喜欢这个特性的。

    这样就可以不必要为一个函数写一堆麻烦的重载函数了。

    写个最简单的例子:

        <?php 
    function Test($name="kym")
    {
    echo($name);
    }
    Test();
    Test("others");
    ?>

    是不是不需要写一个重载函数了呢?

    但是在这里需要注意两点:

    A. 在为参数设置默认值时,只能设置最简单的常量,而不能包含复杂的表达式。

    B. 需要设置默认值的参数必须放在最后。这个类似于C#中的可变参数。

    3. 可变参数

    在C#中,就存在这样一个概念叫可变参数,写个简单的例子:

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
    Response.Write(GetSum(1, 2, 3, 4, 5));
    }
    public int GetSum(params int[] elements)
    {
    int sum = 0;
    for (int i = 0; i < elements.Length; i++)
    {
    sum += elements[i];
    }
    return sum;
    }

    在写例子之前,我先来介绍三个与可变参数相关的函数。

    func_get_args()返回函数的所有参数的数组

    func_get_arg()返回一个来自参数的特定参数

    func_num_args()返回参数的个数。

    好,那么接下来就写一个和C#版本对应的PHP版本。

        <?php 
    function GetSum()
    {
    if(func_num_args()==0)
    {
    return 0;
    }
    $sum=0;
    for($i=0;$i<func_num_args();$i++)
    {
    $sum+=func_get_arg($i);
    }
    return $sum;
    }
    echo(GetSum(1,2,3,4));
    ?>

    4. 可变函数

    我不知道为什么要翻译成这个名字,其实就是根据变量的名字来调用相应的函数。

    很类似于JS中的这个eval,如下所示:

    <script>
    function Execute(functionName)
    {
    eval(functionName+"()");
    }
    function Test()
    {
    alert("111");
    }
    Execute("Test");
    </script>

    这个就是传进来一个函数名,然后来执行对应的函数。那么在PHP中,其实也是一样的,而且更简单了。

    <?php 
    function Test($func)
    {
    $func();
    }
    function First(){echo("first");}
    Test("First");
    ?>

     

  • 相关阅读:
    NetBeans 时事通讯(刊号 # 52 Apr 15, 2009)
    Linux 3.8.1 电源管理之OMAP Clock Domain分析
    基础架构部_超大规模数据平台架构师(上海)
    C Programming/Pointers and arrays Wikibooks, open books for an open world
    这个帖子介绍了关于structure和及struct arrary 作为参数 传递
    thinking point
    velocity
    枫芸志 » 【C】int与size_t的区别
    Pointers and Text Strings
    comp.lang.c Frequently Asked Questions 非常 好
  • 原文地址:https://www.cnblogs.com/wanshutao/p/4447533.html
Copyright © 2011-2022 走看看