php自动加载代码实例详解
1.让我们为PHP创建枚举,提供一些代码示例
如果我们的代码需要对枚举常量和值进行更多验证,该怎么办?
根据使用情况,我通常会使用类似以下的简单内容:
abstractclassDaysOfWeek { constSunday=0; constMonday=1; //etc. } $today=DaysOfWeek::Sunday;
这是一个扩展的示例,可以更好地服务于更广泛的案例:
abstractclassBasicEnum{ privatestatic$constCacheArray=NULL; privatestaticfunctiongetConstants(){ if(self::$constCacheArray==NULL){ self::$constCacheArray=[]; } $calledClass=get_called_class(); if(!array_key_exists($calledClass,self::$constCacheArray)){ $reflect=newReflectionClass($calledClass); self::$constCacheArray[$calledClass]=$reflect->getConstants(); } returnself::$constCacheArray[$calledClass]; } publicstaticfunctionisValidName($name,$strict=false){ $constants=self::getConstants(); if($strict){ returnarray_key_exists($name,$constants); } $keys=array_map('strtolower',array_keys($constants)); returnin_array(strtolower($name),$keys); } publicstaticfunctionisValidValue($value,$strict=true){ $values=array_values(self::getConstants()); returnin_array($value,$values,$strict); } }
我们可以将其用作:
abstractclassDaysOfWeekextendsBasicEnum{ constSunday=0; constMonday=1; constTuesday=2; constWednesday=3; constThursday=4; constFriday=5; constSaturday=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=newClass1(); $object2=newClass2();
在上面的示例中,我们不需要包含Class1.php和Class2.php。spl_autoload_register()函数将自动加载Class1.php和Class2.php。
3.PHP是否支持方法重载?
方法重载是使用具有不同签名的相同方法名称的现象。PHP中函数签名仅基于它们的名称,并且不包含参数列表,因此不能有两个具有相同名称的函数,所以PHP不支持方法重载。
但是,您可以声明一个可变函数,它接受可变数量的参数。您可以使用func_num_args()和func_get_arg()来传递参数并正常使用它们。
functionmyFunc(){ for($i=0;$i问答:不是有__autoload吗为什么不用?
自动加载的原理以及__autoload的使用:
自动加载的原理,就是在我们new一个class的时候,PHP系统如果找不到你这个类,就会去自动调用本文件中的__autoload($class_name)方法,我们new的这个class_name就成为这个方法的参数。所以我们就可以在这个方法中根据我们需要newclass_name的各种判断和划分就去require对应的路径类文件,从而实现自动加载。
spl_autoload_register的使用:
如果一个项目过大,或者需要不同的自动加载来加载不同路径的文件,这个时候autoload就不好用了,
原因是一个项目中只能有一个这样的autoload()函数,因为PHP不允许函数重名,
也就是说你不能声明2个__autoload()函数文件,否则会报致命错误,
所以,可以用新的spl_autoload_register()来取代它。并且,它执行效率更高,更灵活。
到此这篇关于php自动加载代码实例详解的文章就介绍到这了,更多相关php自动加载内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。