php自动加载代码实例详解

2025-05-27 0 60

1. 让我们为 PHP 创建枚举,提供一些代码示例

如果我们的代码需要对枚举常量和值进行更多验证,该怎么办?

根据使用情况,我通常会使用类似以下的简单内容:

?

1

2

3

4

5

6

7

8
abstract class DaysOfWeek

{

const Sunday = 0;

const Monday = 1;

// etc.

}

$today = DaysOfWeek::Sunday;

这是一个扩展的示例,可以更好地服务于更广泛的案例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
abstract class BasicEnum {

private static $constCacheArray = NULL;

private static function getConstants() {

if (self::$constCacheArray == NULL) {

self::$constCacheArray = [];

}

$calledClass = get_called_class();

if (!array_key_exists($calledClass, self::$constCacheArray)) {

$reflect = new ReflectionClass($calledClass);

self::$constCacheArray[$calledClass] = $reflect - > getConstants();

}

return self::$constCacheArray[$calledClass];

}

public static function isValidName($name, $strict = false) {

$constants = self::getConstants();

if ($strict) {

return array_key_exists($name, $constants);

}

$keys = array_map('strtolower', array_keys($constants));

return in_array(strtolower($name), $keys);

}

public static function isValidValue($value, $strict = true) {

$values = array_values(self::getConstants());

return in_array($value, $values, $strict);

}

}

我们可以将其用作:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
abstract class DaysOfWeek extends BasicEnum {

const Sunday = 0;

const Monday = 1;

const Tuesday = 2;

const Wednesday = 3;

const Thursday = 4;

const Friday = 5;

const Saturday = 6;

}

DaysOfWeek::isValidName('Humpday'); // false

DaysOfWeek::isValidName('Monday'); // true

DaysOfWeek::isValidName('monday'); // true

DaysOfWeek::isValidName('monday', $strict = true); // false

DaysOfWeek::isValidName(0); // false

DaysOfWeek::isValidValue(0); // true

DaysOfWeek::isValidValue(5); // true

DaysOfWeek::isValidValue(7); // false

DaysOfWeek::isValidValue('Friday'); // false

2. 什么是 PHP 自动加载类?

使用自动加载器,PHP 允许在由于错误而失败之前最后一次加载类或接口。

PHP 中的 spl_autoload_register() 函数可以注册任意数量的自动加载器,即使未定义类和接口也可以自动加载

?

1

2

3

4

5
spl_autoload_register(function ($classname) {

include $classname . '.php';

});

$object = new Class1();

$object2 = new Class2();

在上面的示例中,我们不需要包含 Class1.php 和 Class2.php。spl_autoload_register() 函数将自动加载 Class1.php 和 Class2.php

3. PHP 是否支持方法重载?

方法重载是使用具有不同签名的相同方法名称的现象。PHP 中函数签名仅基于它们的名称,并且不包含参数列表,因此不能有两个具有相同名称的函数,所以 PHP 不支持方法重载。

但是,您可以声明一个可变函数,它接受可变数量的参数。您可以使用 func_num_args() 和 func_get_arg() 来传递参数并正常使用它们。

?

1

2

3

4

5

6

7

8

9

10

11

12
function myFunc() {

for ($i = 0; $i < func_num_args(); $i++) {

printf("Argument %d: %s\\n", $i, func_get_arg($i));

}

}

/*

Argument 0: a

Argument 1: 2

Argument 2: 3.5

*/

myFunc('a', 2, 3.5);

问答:不是有 __ autoload 吗 为什么不用?

自动加载的原理以及__autoload 的使用:

自动加载的原理,就是在我们 new 一个 class 的时候,PHP 系统如果找不到你这个类,就会去自动调用本文件中的__autoload ($class_name) 方法,我们 new 的这个 class_name 就成为这个方法的参数。所以我们就可以在这个方法中根据我们需要 new class_name 的各种判断和划分就去 require 对应的路径类文件,从而实现自动加载

spl_autoload_register 的使用:

如果一个项目过大,或者需要不同的自动加载来加载不同路径的文件,这个时候 autoload 就不好用了,

原因是一个项目中只能有一个这样的 autoload () 函数,因为 PHP 不允许函数重名,

也就是说你不能声明 2 个__autoload () 函数文件,否则会报致命错误,

所以,可以用新的 spl_autoload_register () 来取代它。并且,它执行效率更高,更灵活。

到此这篇关于php自动加载代码实例详解的文章就介绍到这了,更多相关php自动加载内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/liuxingjiaoyuC/article/details/114063076

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php自动加载代码实例详解 https://www.kuaiidc.com/70238.html

相关文章

发表评论
暂无评论