php函数调用形参自定义类型

一、PHP函数调用形参自定义类型

在PHP中,函数参数默认情况下是没有类型限制的,即可以接受任何类型的数据作为参数。但是,PHP7之后,加入了声明函数形参类型的特性,即可以限制函数参数的数据类型。这种数据类型声明可以应用于标量类型、数组类型和对象类型等。

1. 标量类型的数据类型声明

标量类型的数据类型声明包括:整型、浮点型、布尔型和字符串型四种类型。使用方法如下:

```php

function add(int $a, int $b)

{

return $a + $b;

}

add(1, 2); // 输出:3

add(1.5, 2.5); // 报错:参数类型不正确

```

在上面的例子中,add函数的两个参数都是整型数字,如果传入的参数类型不是整型,则会报错。这样就可以避免函数内部编写类型判断语句,减少代码冗余。

2. 数组类型的数据类型声明

在PHP5之前,使用函数的方式来检测变量是否是数组类型,检测的方式比较繁琐。而从PHP7开始支持了数组类型的数据类型声明,可以用于指定函数参数的类型。

```php

function sum(array $arr)

{

$total = 0;

foreach ($arr as $val) {

$total += $val;

}

return $total;

}

sum([1, 2, 3]); // 输出:6

sum(1); // 报错:参数类型不正确

```

在上面的例子中,sum函数的参数必须是一个数组类型,如果传入的不是数组,则会报错。

3. 对象类型的数据类型声明

对象类型的数据类型声明可以用于指定函数形参的类型必须是指定类或其子类的实例,如下所示:

```php

class Person {

public $name;

public $age;

public function __construct($name, $age) {

$this->name = $name;

$this->age = $age;

}

}

class Student extends Person {

public function __construct($name, $age, $grade) {

parent::__construct($name, $age);

$this->grade = $grade;

}

}

function getAge(Person $per) {

return $per->age;

}

$person = new Person('Tom', 20);

$student = new Student('Jack', 18, 'A');

echo getAge($person); // 输出:20

echo getAge($student); // 输出:18

```

在上面的例子中,getAge函数的形参必须是Person对象或其子类的实例,否则就会报错。

二、PHP如何优雅地处理异常

在PHP中,异常处理是一个重要的主题。异常是指在程序执行期间发生意外情况,导致程序无法正常执行。例如,文件不存在、数据库连接失败等情况都可能会抛出异常。

1. 抛出异常

在PHP中,可以使用throw语句抛出异常。throw语句后面跟着一个异常对象,如下所示:

```php

class FileNotFoundException extends Exception {}

function ReadFile($filename) {

if(!file_exists($filename)){

throw new FileNotFoundException("文件 $filename 不存在");

}

// 读取文件内容

}

try {

ReadFile('test.txt');

} catch (FileNotFoundException $ex) {

echo $ex->getMessage(); // 输出:文件 test.txt 不存在

}

```

在上面的例子中,如果文件不存在,则抛出一个自定义的FileNotFoundException异常对象,然后在try-catch代码块中捕获该异常对象,并输出异常信息。

2. 捕获异常

在PHP中,使用try-catch代码块来捕获异常。try代码块中的语句块是需要进行异常捕获的代码,而catch代码块中的语句块则是用于处理异常的代码。代码如下所示:

```php

function div($a, $b)

{

if ($b == 0) {

throw new Exception('除数不能为0');

}

return $a / $b;

}

try {

echo div(1, 0);

} catch (Exception $e) {

echo $e->getMessage();

}

```

在上面的例子中,如果$b等于0,则会抛出一个异常。由于被除数不能为0,因此要捕获这个异常,如果出现了这种情况,则会执行catch代码块中的语句块,并输出异常信息。

3. 使用finally子句

在PHP中,还可以使用finally子句,在try-catch语句块的后面添加一条finally子句,用于执行一些必须完成的操作,例如关闭文件或释放资源等。

```php

$file = fopen('test.txt', 'r');

try {

// 读取文件内容

} catch (Exception $e) {

echo $e->getMessage();

} finally {

fclose($file);

}

```

在上面的例子中,无论是否发生异常,都会执行finally代码块中的语句块,关闭文件资源。

四、总结

PHP提供了声明函数形参类型的特性,可以有效地避免出现错误的数据类型传参。同时,异常处理也是PHP编程中一个非常重要的方面。通过抛出异常和捕获异常,我们可以对程序中的错误情况进行有效的处理,确保程序的正常运行。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(1) 打赏

评论列表 共有 1 条评论

十年浮夸终成孤独患者 1年前 回复TA

金黄的落叶,金黄的飘,金黄的财宝,金黄的照,金黄的秋天已来到,哇塞,满城尽带黄金甲,祝你四季发财!

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