php自动加载代码实例详解
发布:smiling 来源: PHP粉丝网 添加日期:2022-04-13 10:32:23 浏览: 评论:0
这篇文章主要介绍了php自动加载代码实例详解,文中代码讲解的很清晰,有感兴趣的同学可以研究下。
1. 让我们为 PHP 创建枚举,提供一些代码示例
如果我们的代码需要对枚举常量和值进行更多验证,该怎么办?
根据使用情况,我通常会使用类似以下的简单内容:
- abstract class DaysOfWeek
- {
- const Sunday = 0;
- const Monday = 1;
- // etc.
- }
- $today = DaysOfWeek::Sunday;
这是一个扩展的示例,可以更好地服务于更广泛的案例:
- 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);
- }
- }
我们可以将其用作:
- 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() 函数可以注册任意数量的自动加载器,即使未定义类和接口也可以自动加载。
- 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() 来传递参数并正常使用它们。
- 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 () 来取代它。并且,它执行效率更高,更灵活。
Tags: php自动加载
- 上一篇:PHP的重载使用魔术方法代码实例详解
- 下一篇:最后一页
相关文章
- ·php自动加载__autoload()函数用法(2018-06-11)
- ·PHP自动加载autoload和命名空间的应用小结(2018-11-04)
- ·PHP自动加载机制实例详解(2021-10-05)
- ·PHP命名空间与自动加载类详解(2021-10-27)
- ·PHP中的自动加载操作实现方法详解(2021-12-09)
- ·php的命名空间与自动加载实现方法(2021-12-12)
- ·PHP命名空间与自动加载机制的基础介绍(2021-12-12)
- ·PHP MVC框架中类的自动加载机制实例分析(2021-12-19)
- ·PHP 命名空间和自动加载原理与用法实例分析(2022-03-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)