PHP学习之手册整理(六)--------函数

1. 函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时。 当一个函数是有条件被定义时,必须在调用函数之前定义。 

注意:PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。

注意:PHP调用函数不区分大小写

<?php
​
$makefoo = true;
​bar(); //不能在此处调用foo()函数,因为它还不存在

​
if ($makefoo) {
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}
​
foo(); // 现在可以调用函数 foo(),因为foo()已经定义
​
function bar()
{
  echo "I exist immediately upon program start.\n";
}

<?php
function foo()
{
  function bar()
  {
    echo "I don't exist until foo() is called.\n";
  }
}
​
foo(); // 现在还不能调用bar()函数,因为它还不存在
bar(); // 现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数

2. 调用递归函数

注意:但是要避免递归函数/方法调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止。 无限递归可视为编程错误。

<?php
function recursion($a)
{
    if ($a > 20) {
        reutrn $a;
    } else {
        echo "$a\n";
        recursion($a + 1);
    }
}
​

3. PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

//先明确一下什么是函数重载,函数重载是指函数名相同,参数个数不同或者参数类型不同,返回值可以相同也可以不同

<?php

function showdata($name, $personInfo = array(), $datatime = '')
{
	// 通过function_num_args()函数得到参数的个数,根据个数来执行不同的函数
    switch (function_num_args())  
    {
        case 1:
            $result = show($name);
            break;
        case 2:
            $result = show($name, $personInfo);
            break;
        case 3:
            $result = show($name, $personInfo, $datatime);
            break;
    }
    return $result;
}


//类里面的方法实现重载
class Test
{
    public function __call($methodname, $data)
    {
        if ($methodname == "show") {
            //根据参数类型实现重载
            if (is_array($data[0])) {
                $this->displayArray($data[0]);
            } else {
                $this->displayCommon($data[0]);
            }
            //根据参数个数实现重载
//            $numArgs = count($data);
//            switch ($numArgs)
//            {
//                case 1:
//                    $this->displayArray($data);
//                    break;
//                case 2:
//                    $this->displayArray($data[0], $data[1]);
//                    break;
//                case 3:
//                    $this->displayArray($data[0], $data[1], $data[2]);
//                    break;
//            }
        }
    }

    private function displayArray($data)
    {
        var_dump($data);
    }

    private function displayCommon($data)
    {
        var_dump($data);
    }
}

$object = new Test();
$object->show(array(3,6,9));
$object->show('PHP是世界上最好的语言');

猜你喜欢

转载自blog.csdn.net/qq_41993206/article/details/80878310