速戰速決 (3) - PHP: 函數基礎, 函數參數, 函數返回值, 可變函數, 匿名函數, 閉包函數, 回調函數

[源碼下載]


php

速戰速決 (3) - PHP: 函數基礎, 函數參數, 函數返回值, 可變函數, 匿名函數, 閉包函數, 回調函數



做者:webabcd


介紹
速戰速決 之 PHPhtml

  • 函數基礎
  • 函數參數
  • 函數返回值
  • 可變函數
  • 匿名函數
  • 閉包函數
  • 回調函數



示例
一、函數的相關知識點 1(基礎)
function/function1.phphtml5

<?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(函數參數)
function/function2.phpc++

<?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(函數返回值)
function/function3.phpweb

<?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(可變函數,匿名函數,閉包函數)
function/function4.phpwindows

<?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(回調函數)
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
[源碼下載]asp.net

相關文章
相關標籤/搜索