php 函数数组引用传递

一、 PHP 函数数组引用传递

在 PHP 中,函数参数传递有传值和传引用两种方式。传值方式是将参数的值复制一份传递到函数中使用,这样函数内对参数的修改不会影响参数的原值。而传引用方式是将参数的引用传递到函数中使用,函数内对参数的修改会直接影响参数的原值。

对于数组参数,传值方式是将数组的值复制一份传递到函数中,函数内对数组的修改不会影响参数的原数组。传引用方式是将数组的引用传递到函数中,函数内对数组的修改会直接影响参数的原数组。

示例代码:

```

function addOne($num) {

$num += 1;

}

function addOneToArray($array) {

foreach ($array as &$val) {

$val += 1;

}

}

$num = 1;

addOne($num);

echo $num; // 输出 1,因为传值方式不会修改原值

$array = [1, 2, 3];

addOneToArray($array);

print_r($array); // 输出 [2, 3, 4],因为传引用方式直接修改原数组

```

在函数参数中使用引用传递数组时,需要在参数名称前加上 `&` 符号表示引用传递。示例代码:

```

function addOneToArray(&$array) {

foreach ($array as &$val) {

$val += 1;

}

}

$array = [1, 2, 3];

addOneToArray($array);

print_r($array); // 输出 [2, 3, 4],因为使用了引用传递方式

```

二、 PHP 捕捉异常

在 PHP 中,异常是一种用于处理代码执行过程中发生的错误的机制。当出现错误时,可以抛出一个异常,然后在上层代码通过捕获异常来进行处理。异常处理可以让程序代码更加健壮,提高了代码的健壮性和可读性。

在 PHP 中,异常是通过 `try...catch` 语句来捕获和处理的。`try` 块中的代码表示要进行异常检测的代码,`catch` 块用于捕获并处理异常。示例代码:

```

try {

// 要进行异常检测的代码

} catch (Exception $e) {

// 处理异常

}

```

在 `try` 块中,抛出异常使用 `throw` 关键字。`throw` 后面可以是一个异常对象,也可以是一个字符串、数字等类型的数据,但是这种情况下会抛出一个 `ErrorException` 异常。示例代码:

```

try {

$num = 10 / 0;

} catch (Exception $e) {

echo "捕获到异常:" . $e->getMessage();

}

```

在上述代码中,由于除数为 0 ,会抛出一个 `DivisionByZeroError` 异常,最终会被 `catch` 块中的代码捕获并输出异常信息。

自定义异常是实现异常处理的一种方式。自定义异常可以继承 PHP 自带的 `Exception` 类,也可以继承其他异常类,从而实现自己的异常类。自定义异常可以定义一些额外的属性和方法,方便在异常发生后进行处理。示例代码:

```

class CustomException extends Exception {

public function __construct($message, $code = 0) {

parent::__construct($message, $code);

}

public function customFunction() {

echo "自定义异常方法";

}

}

try {

throw new CustomException("自定义异常", 1001);

} catch (CustomException $e) {

echo "捕获到自定义异常:" . $e->getMessage() . ", code=" . $e->getCode();

$e->customFunction();

}

```

在上述代码中,自定义的异常类 `CustomException` 继承了 `Exception` 类,并添加了一个自定义方法 `customFunction()`。在 `try` 块中抛出 `CustomException` 异常,最终会被 `catch` 块中的代码捕获,并输出异常信息和自定义方法。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(54) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部