【PHP】函数

这篇文章是PHP总复习 Advent Calendar的第5天文章!

我本打算写一下关于类型的内容,但是已经有人非常详细地解释过了!关于PHP的类型和类型安全(从PHP7开始的PHP编程)。

在这个问题中,我们将讨论函数,它是指在何种情况下我们需要意识到“型”的存在!如果您已经对用户定义函数的概述有所了解,可以直接跳过这部分!笑

函数是什么?

变量是用来存放值的容器,而函数是用来将多个处理步骤整合起来的东西。
有预先提供的”内置函数”和自己定义的”用户定义函数”。

如何使用和编写函数

内置函数。

例如,对于isset()函数来说。PHP手册

$result = isset($name);

这个函数用于检查$name是否已设置,并返回布尔类型的true或false。

将传递给函数的值(这里是$name)称为“参数”,返回的值称为“返回值(或称为回值)”。
通过以上写法,返回值将存储在$result中。

由于在这里返回值是布尔类型,因此在下一步处理中

// もしtrueだったら
if ($result) {
    ・・・
}

那就是可以继续进行这个处理的意思对吧。

有许多内置函数,如isset()、substr()、explode()等等,以至于无法全部记住。
在使用之前,不是记住它们,而是通过查看PHP手册等来检查参数和返回值类型。

用户自定义函数

自己编写的函数也具有“参数”和“返回值”的概念。它会执行一些操作并返回结果。

基本写作技巧

<?php

// greetingという名前をつけた関数
function greeting($name) {
    $message = 'Hello, '. $name. '!'; // 処理

    return $message; // 結果を返す
}

$message = greeting('Tom');
echo $message; // 'Hello, Tom!'

当函数返回结果时,处理将在此处结束。

<?php

function greeting($name) {
    $message = 'Hello, '. $name. '!';
    return $message;

    $message .= 'Nice to meet you.'; // この部分は実行されない
}

$message = greeting('Tom'); 
echo $message; // 'Hello, Tom!'

顺便说一句,刚开始作为初学者时理解起来很困难,函数内部的$message变量和返回值的$message是不同的。
函数内部的变量是局部作用域(仅在函数内部可引用)。

<?php

function greeting($name) {
    $message = 'Hello, '. $name. '!';

    return $message;
}

$greeting = greeting('Tom');

echo $greeting; // 'Hello, Tom!'
echo $message; // 宣言されていないのでエラーになる

如果您对此内容不太理解,请参考变量作用域的部分!

传递多个参数

在向函数传入多个参数的情况下,我们按照从左到右的顺序称之为第一个参数,第二个参数… 同样,调用函数时也要注意按照从左到右的顺序进行传递。

<?php

function greeting($time, $name) {
    $message = 'Good '. $time. ', ' $name;

    return $message;
}

$message = greeting('morning', 'Tom');

echo $message; // 'Good morning, Tom';

在这里,$time是第一个参数,$name是第二个参数。

返回一个数组的函数

您还可以使用数组来返回多个值。在这种情况下,返回值将被接收为list()或数组。

<?php

function children() {
    return ['Tom', 'Bob', 'Emily'];
}

$children = children();
list($elder, $younger, $sister) = children();

echo $children[0]; // 'Tom'
echo $elder; // 'Tom'

没有返回值的函数

有时也可能没有返回值。

<?php

function greeting($name) {
    $message = 'hello, '. $name. '!';

    echo $message;
}

greeting('Tom'); // 'hello, Tom!'と表示される

在函数内使用”echo”函数来输出消息,所以即使不接收返回值也会有输出。

在评论中明确指定类型

由于无法确定用户自定义函数返回的值是什么,最好在注释中明确指定类型(称为PHPDoc)。

<?php

/**
 * @param string $name
 * @return string
 */
function greeting($name) {
    $message = 'Hello, '. $name. '!';

    return $message;
}

$message = greeting('Tom');
echo $message; // 'Hello, Tom!'

@param表示传入参数,@return表示返回值。PHP手册
关于注释的内容稍后将会整理!

模型宣言

而且,您可以声明参数的类型(类型提示)。(*请注意,在较旧版本的PHP中无法执行/行为不同)

<?php

function greeting(string $name) :string {
    $message = 'Hello, '. $name. '!';

    return $message;
}

在这种情况下,如果传递给$name的不是字符串类型,将会产生错误。

设置默认值为参数

我们可以为参数设置默认值。这在创建不会因为没有传入参数而导致错误的处理时非常有用。

<?php

function greeting($name = 'guest user') {
    $message = 'Hello, '. $name. '!';

    return $message;
}

echo greeting('Tom'); // 'Hello, Tom!'
echo greeting(); // 'Hello, guest user!'

为了防止意外错误的发生,重要的是要意识到类型!

用户自定义函数汇总

<?php

/**
 * @param string $name
 * @param array $date
 * @return string
 */
function greeting(string $name = 'guest user', array $date) :string {
    $message = 'Hello, '. $name. '!';
    $message .= 'It's '. $date[0]. ' '. $date[1];

    return $message;
}

$user = 'Tom';
$today = ['December', '5th'];

echo greeting($user, $today); // 'Hello, Tom!It's December 5th'

理解到这个程度真是太令人愉快了!

编写用户定义函数有很多种方法。

函数声明

这是介绍到目前为止的调用函数的写法。

<?php

function FUNCTION_NAME() {
    // 処理

    return VALUE;
}

FUNCTION_NAME();

函数名称不区分大小写。

匿名函数

从PHP5.3开始,可以使用匿名函数。匿名函数字面上就是没有名称的函数。

<?php

$greeting = function($name) {
    $message = 'hello, '. $name. '!';

    return $message;
}

echo $greeting('Tom');

同样可以将变量继承给匿名函数。

<?php

$time = 'morning';

$greeting = function($name) use ($time) {
    $message = 'Good '. $time. ', '. $name;

    return $message;
}

echo $greeting('Tom'); // 'Good morning, Tom'

在使用频率仅为一次的函数上,例如DB事务处理等,使用匿名函数可以防止代码冗长化。

当我刚开始学习编程的时候,由于不理解类型,常常遇到写了一些不明所以的代码然后产生错误。所以,强烈建议大家应该好好理解类型!现在能够进行类型声明了,感觉非常爽快呢( 厂˙ω˙ )厂

bannerAds