PHP 학습 기능

不言
不言원래의
2018-04-09 16:02:191068검색

이 글은 PHP 학습의 함수에 대한 지식을 소개합니다. 필요한 친구들이 참고할 수 있습니다.

함수 정의

  1. 사용 가능한 함수 이름은 문자 또는 밑줄로 시작하고 그 뒤에 문자, 숫자 또는 밑줄이 옵니다.

  2. 함수 이름은 대소문자를 구분하지 않습니다(사실 PHP의 함수 이름, 메서드 이름 및 클래스 이름은 대소문자를 구분하지 않습니다). 함수는 조건부로 정의됩니다.

  3. PHP는 함수 오버로딩을 지원하지 않으며 선언된 함수를 정의 해제하거나 재정의하는 것이 불가능합니다.

  4. <?php
    Test(); # function test.
    
    function test()
    {
        echo 'function test.';
    }

    함수의 매개변수

  5. 1. 값으로 전달

함수 내부의 매개변수 값을 변경해도 함수 외부의 매개변수 값에는 영향을 미치지 않습니다.

<?php
$i = 1;
add($i);
echo $i; # 1

function add($test)
{
    $test++;
}
2. 매개변수 값은 함수 내부와 외부에서 일관됩니다. 참조로 전달하려면 함수 정의의 매개변수 앞에 & 기호를 추가하면 됩니다:
<?php
$i = 1;
add($i);
echo $i; # 2

function add(&$test)
{
    $test++;
}

3. 가변 개수의 매개변수

PHP는 가변 개수의 매개변수를 지원합니다. 함수를 정의할 때 나열된 매개변수는 실제로 최소 매개변수일 뿐입니다. 호출 시 여러 매개변수가 허용되지만 추가 매개변수는 무시됩니다.
function add($a, $b) 
{
    return $a + $b;
}

echo add(1,2,5); # 3

PHP 5.5 및 이전 버전에서는 불확실성을 처리해야 하는 경우 매개변수 수는 다음 함수를 사용하여 처리됩니다. &

<?php
function func() 
{
    $argc = func_num_args();
    $argv = func_get_args();
    switch ($argc) {
       case 0:
           echo "没有参数。<br />";
           break;
       case 1:
           echo "只有1个参数。它是:" . func_get_arg(0) . "。<br />";
           break;
       case 2:
           echo "有2个参数。它们是:" . func_get_arg(0) . "," . func_get_arg(1) . "。<br />";
           break;
       default:
           echo "超过2个参数。它们是:";
           print_r($argv);
           break;
    }
}

func();          # 没有参数。
func(1);         # 只有1个参数。它是:1。
func(1,2);       # 有2个参数。它们是:1,2。
func(1,2,3,4,5); # 超过2个参数。它们是:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
3.可变数量的参数

PHP 支持可变数量的参数。定义函数时列出的参数实际上只是最少的参数;在调用时是允许多传参数的,只是多余的参数会被忽略掉:

function sum(...$numbers) 
{
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4); # 10

在 PHP 5.5 及更早版本中,如果需要处理不确定数量的参数,可以使用以下函数进行处理:
func_num_args() — 返回传递给函数的参数个数
func_get_arg() — 返回指定的参数
func_get_args() — 以数组的形式返回参数列表

<?php
function foo() 
{
    echo "In foo()";
}

$func = 'foo';
$func(); # In foo()

在 PHP 5.6 及以上的版本中,由 ... 语法实现可变数量的参数列表:

<?php
print_r(array_map(function($value) {
    return $value * 2;
}, range(1, 5)));
# Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )

可变函数

PHP 支持可变函数的概念 —— 如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它:

$greet = function($name) {
    printf("Hello %s\r\n", $name);
};

$greet('World'); # Hello World
注:可变函数不支持 PHP 中的语言结构,如 echoprint 等。

匿名函数

在 PHP 中,匿名函数,也叫闭包函数,是指允许临时创建一个没有指定名称的函数。常用于回调函数中的参数:

<?php
$message = 'hello';

$example = function () use ($message) {
    echo $message;
};
$example(); # hello

闭包函数也可以作为变量的值来使用:

<?php
$result = 0;
 
$one = function() use ($result) { 
    var_dump($result); 
};
 
$two = function() use (&$result) { 
    var_dump($result); 
};
 
$result++;
 
$one();  # int(0)
$two();  # int(1)

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去:

<?php
function named_func($param1, $param2)
{
    echo "这是一个命名函数。参数是:$param1 和 $param2 。<br />";
}

call_user_func("named_func", "PARAM1", "PARAM2");

call_user_func_array("named_func", array("PARAM1", "PARAM2"));

如果需要延迟绑定 use 里面的变量,需要使用引用,否则在定义的时候就会做一份拷贝放到 use 中:

rrreee

函数动态调用

在 PHP 中,除了直接调用函数外,还可以通过 call_user_func()call_user_func_array()func_num_args() — 함수에 전달된 매개변수 수를 반환합니다.

func_get_arg() — 지정된 매개변수를 반환합니다.

func_get_args( ) — 배열 형식으로 매개변수 목록을 반환합니다.

rrreee

PHP 5.6 이상에서는 가변 개수의 매개변수 목록이 ... 구문으로 구현됩니다. rrreee 변수 함수

PHP는 변수 함수 개념을 지원합니다. 변수 이름 뒤에 괄호가 있으면 PHP는 변수 값과 동일한 이름을 가진 함수를 찾아 실행을 시도합니다. rrreee

참고: 변수 함수 echo, print 등과 같은 PHP의 언어 구조는 지원되지 않습니다.
익명 함수

PHP에서는 클로저 함수라고도 불리는 익명 함수를 사용하면 지정된 이름 없이 함수를 임시로 생성할 수 있습니다. 콜백 함수에 일반적으로 사용되는 매개변수:
rrreee

클로저 함수는 변수의 값으로도 사용할 수 있습니다. 🎜rrreee🎜 클로저는 상위 범위에서 변수를 상속할 수 있습니다. 이러한 변수는 모두 use 언어 구성을 사용하여 전달되어야 합니다. 🎜rrreee🎜 use에서 변수 바인딩을 지연해야 하는 경우 참조를 사용해야 합니다. 그렇지 않으면 참조를 사용해야 합니다. 사본이 만들어져 use에 배치됩니다: 🎜rrreee🎜동적 함수 호출🎜🎜PHP에서는 함수를 직접 호출하는 것 외에도 call_user_func()를 전달할 수도 있습니다. > 또는 call_user_func_array() 함수 간접 호출 함수: 🎜rrreee🎜관련 권장 사항: 🎜🎜🎜PHP 학습용 배열 🎜🎜🎜🎜WampSever용 PHP 학습 🎜                              🎜🎜🎜🎜

위 내용은 PHP 학습 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 학습 문자열다음 기사:PHP 학습 문자열