我正在寻找以下问题。 我们项目的类文件名称为logon.class.php 但该类的接口文件名为logon.interface.php
我的问题是,当自动加载方法运行时,我应该能够检测它是类调用还是接口调用。
<?php
function __autoload($name){
if($name === is_class){
include_once($name.'class.php');
}elseif ($name === is_interface){
include_once($name.'interface.php');
}
}
?>
答案 0 :(得分:3)
您可以使用ReflectionClass::isInterface来确定该类是否为接口。
$reflection = new ReflectionClass($name);
if ($reflection->isInterface()){
//Is an interface
}else{
//Not an interface
}
在您的情况下,您可能必须先在file_exist
和$name.interface.php
上使用$name.class.php
来确定它们是否存在,是否需要存在,然后检查它是否是接口。
但是,我认为这可能会导致问题。如果您有MyClass.class.php
和MyClass.interface.php
答案 1 :(得分:0)
您的类和接口应该有一些命名约定,例如您的班级名称为logon
,界面名称为logon_interface
,您可以轻松区分这两者。例如,通过下划线爆炸$name
并检查最后一个元素是否为interface
。
答案 2 :(得分:0)
为避免类名冲突,您可以使用名称空间。检查PSR-0规格。
同时检查此post。如果在包含文件之前读取文件的内容,则可以对其进行标记,并确定文件是否包含接口或类,而不实际加载类/接口。请记住,接口和类不能具有相同的名称
注意:使用此方法,您实际上可以在运行时更改接口的名称(在加载类之前,虽然这似乎是非常好的做法)