速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

[源码下载]


速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数



作者:webabcd


介绍
速战速决 之 PHP

  • 函数基础
  • 函数参数
  • 函数返回值
  • 可变函数
  • 匿名函数
  • 闭包函数
  • 回调函数



示例
1、函数的相关知识点 1(基础)
function/function1.php

<?php
/**
 * 函数的相关知识点 1(基础)
 */

// 可以在相关的 function 声明语句之前调用该函数
f1();
function f1()
{
    echo "f1";
    echo "<br />";
}


// 这里调用 f2() 就错误了
// f2();
$b = true;
if ($b)
{
    function f2() // 条件成立才会声明此函数
    {
        echo "f2";
        echo "<br />";
    }
}
f2();


// 这里调用 f4() 就错误了(因为 f4 的声明是在 f3 的内部,所以要先调用 f3 才能再调用 f4)
// f4();
f3();
f4();
function f3()
{
    echo "f3";
    echo "<br />";

    function f4()
    {
        echo "f4";
        echo "<br />";
    }
}


2、函数的相关知识点 2(函数参数)
function/function2.php

<?php
/**
 * 函数的相关知识点 2(函数参数)
 */

// 带参数的函数
f1("webabcd");
function f1($name)
{
    echo "hello " . $name; // output: hello webabcd
    echo "<br />";
}


// 带参数的函数(参数是引用类型)
$name = "webabcd";
f2($name);
function f2(&$n) // 参数是引用类型
{
    echo "hello " . $n; // output: hello webabcd
    echo "<br />";

    $n = "wanglei"; // $n 是引用类型,其与全局变量 $name 指向的内容是一样的
}
echo "hello " . $name; // output: hello wanglei
echo "<br />";


// 带参数的函数(参数可以指定默认值)
f3("hello "); // output: hello webabcd
f3("hello ", "wanglei"); // output: hello wanglei
function f3($p1, $p2 = "webabcd") // 参数的默认值只能是常量,不能是表达式
{
    echo $p1 . $p2;
    echo "<br />";
}


3、函数的相关知识点 3(函数返回值)
function/function3.php

<?php
/**
 * 函数的相关知识点 3(函数返回值)
 */

// 带返回值的函数
$result1 = f1("webabcd");
echo $result1;
echo "<br />";
function f1($name)
{
    return "hello " . $name; // output: hello webabcd
}


// 从函数返回以一个引用(函数的声明和调用都要加 &)
$result2 = &f2();
echo $result2;  // output: 1
echo "<br />";
$result2 = 100; // $result2 是个引用,指向 $i 所指向的内容,所以此句之后 $i 的值为 100
$result3 = &f2();
echo $result3;  // output: 101
echo "<br />";
function &f2() // 此函数会返回一个引用(函数的声明和调用都要加 &)
{
    static $i = 0;
    $i ++;

    return $i;
}


4、函数的相关知识点 4(可变函数,匿名函数,闭包函数)
function/function4.php

<?php
/**
 * 函数的相关知识点 4(可变函数,匿名函数,闭包函数)
 */

// variable function(可变函数),将变量的值作为函数名
function f1()
{
    echo "f1"; // output: f1
    echo "<br />";
}
function f2()
{
    echo "f2"; // output: f2
    echo "<br />";
}
$func = 'f1';
$func();
$func = 'f2';
$func();


// 匿名函数
echo preg_replace_callback // output: userName
(
    '~-([a-z])~',
    function ($match) // 匿名函数
    {
        return strtoupper($match[1]);
    },
    'user-name'
);


// 闭包函数
// $f3("webabcd"); // 这是错误的,对于闭包函数来说,调用时要在声明语句的后面
$f3 = function($name)
{
    echo "hello " . $name; // output: hello webabcd
    echo "<br />";
}; // 别忘了闭包函数的“;”
$f3("webabcd");


5、函数的相关知识点 5(回调函数)
function/function5.php

<?php
/**
 * 函数的相关知识点 5(回调函数)
 */

// 用于演示如何回调(callback)函数
function myCallbackFunction()
{
    return 'myCallbackFunction';
}

class MyClass1
{
    // 用于演示如何回调(callback)实例方法
    public function myMethod1()
    {
        echo 'MyClass1 myMethod1';
        echo '<br />';
    }

    // 用于演示如何回调(callback)类方法
    public static function myMethod2()
    {
        echo 'MyClass1 myMethod2';
        echo '<br />';
    }
}

// 通过 call_user_func 调用指定的函数
echo call_user_func('myCallbackFunction');
echo '<br />';

$obj1 = new MyClass1();
// 通过 call_user_func 调用指定对象的指定方法
call_user_func(array($obj1, 'myMethod1'));

// 通过 call_user_func 调用指类的类方法
call_user_func(array('MyClass1', 'myMethod2'));

// 通过 call_user_func 调用指类的类方法(PHP 5.2.3 或以上)
call_user_func('MyClass1::myMethod2');



OK
[源码下载]

posted @ 2016-05-05 09:06  webabcd  阅读(1542)  评论(0编辑  收藏  举报