类和接口 php 之间的自动加载差异 [英] autoload differnece between class and interface php
问题描述
我正在寻找我遇到的以下问题.我们项目的类文件名为 logon.class.php但该类的接口文件名为 logon.interface.php
I'm searching for following issue i have. The class file names of our project are named logon.class.php But the interface file for that class is named logon.interface.php
我的问题是,当自动加载方法运行时,我应该能够检测到它是类调用还是接口调用.
My issue i have is that when the autoload method runs I should be able to detect if it is a class call or an interface call.
<?php
function __autoload($name){
if($name === is_class){
include_once($name.'class.php');
}elseif ($name === is_interface){
include_once($name.'interface.php');
}
}
?>
推荐答案
您可以使用 ReflectionClass::isInterface 判断类是否为接口.
You can use ReflectionClass::isInterface to determine if the class is an interface.
$reflection = new ReflectionClass($name);
if ($reflection->isInterface()){
//Is an interface
}else{
//Not an interface
}
在您的情况下,您可能必须首先在 $name.interface.php
和 $name.class.php
上使用 file_exist
确定它们是否存在,要求存在的那个,然后检查它是否是一个接口.
In your case, you would probably have to use file_exist
first on $name.interface.php
and $name.class.php
to determine if they exist, require the one that exists, then check if it's an interface.
但是,我认为这可能会导致问题.如果你有 MyClass.class.php
和 MyClass.interface.php
怎么办?
However, my opinion is that this might cause problems down the track. What if you have MyClass.class.php
and MyClass.interface.php
?
这篇关于类和接口 php 之间的自动加载差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!