2024 年 PHP 大会日本站

interface_exists

(PHP 5 >= 5.0.2, PHP 7, PHP 8)

interface_exists检查接口是否已定义

描述

interface_exists(字符串 $interface, 布尔值 $autoload = true): 布尔值

检查给定的接口是否已定义。

参数

interface

接口名称

autoload

是否自动加载(如果尚未加载)。

返回值

如果由 interface 给出的接口已定义,则返回 true,否则返回 false

示例

示例 #1 interface_exists() 示例

<?php
// 在尝试使用接口之前检查接口是否存在
if (interface_exists('MyInterface')) {
class
MyClass implements MyInterface
{
// 方法
}
}

?>

参见

添加注释

用户贡献的注释 4 个注释

CoR
9 年前
类和接口共享相同的命名空间!

class k{}

interface k {} // 致命错误:无法重新声明类 k
nils dot rocine at gmail dot com
13 年前
关于命名空间的一点说明,对某些人来说可能显而易见,但对我来说并不明显。

当语句与接口/类声明 MyInterface 位于同一命名空间时,您可以编写下面的语句……
<?php
$foo
instanceof MyInterface
?>

使用 interface_exists 或 class_exists 函数时,您必须输入完整的命名空间接口名称,如下所示(即使函数调用来自同一命名空间)。
<?php
interface_exists
(__NAMESPACE__ . '\MyInterface', false);
?>
andrey at php dot net
20 年前
据我记得,interface_exists() 是在 5.0.2 中添加的。在 5.0.0 和 5.0.1 中,class_exists() 用于在请求现有接口时返回 TRUE。从 5.0.2 开始,class_exists() 不再这样做。
maxim at inbox dot ru
12 年前
如果您想检查已包含的接口,并且您已经注册了 spl 自动加载器 - 它会崩溃。因为自动加载器试图加载`字符串`,它并不关心它是类还是不是。
我找到了几种方法
1 - 注销 AL - -> 检查接口 - -> 注册自动加载器

2 - $ifaces = array_flip(get_declared_interfaces());
if($ifaces["MyIface"]) // 空 // isset .

接口并没有不好,您可以构建正确的系统几何结构,并通过函数/变量/常量进行验证。
它们也适合存储变量 <?php
ROOT
::THEMES ; ROOT::LOC ; ?> 。比 Define 快得多,但您不能在其中放入算法,只能放入完整的字符串/__file__/等。
To Top