interface_exists

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

interface_exists检查接口是否已定义

描述

interface_exists(string $interface, bool $autoload = true): bool

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

参数

interface

接口名称

autoload

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

返回值

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

示例

示例 #1 interface_exists() 示例

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

?>

参见

添加笔记

用户贡献笔记 4 个笔记

CoR
8 年前
类和接口共享同一个命名空间!

class k{}

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

虽然当语句与接口/类声明 MyInterface 在同一个命名空间时,你可以执行以下语句...
<?php
$foo
instanceof MyInterface
?>

使用 interface_exists 或 class_exists 函数,你必须输入完整的命名空间接口名称,如下所示(即使函数调用来自同一个命名空间)。
<?php
interface_exists
(__NAMESPACE__ . '\MyInterface', false);
?>
andrey at php dot net
19 年前
据我所知,interface_exists() 是在 5.0.2 中添加的。在 5.0.0 和 5.0.1 中,class_exists() 用于在询问现有接口时返回 TRUE。从 5.0.2 开始,class_exists() 不再执行此操作。
maxim at inbox dot ru
11 年前
如果你想检查包含的接口,并且你已经注册了 spl 自动加载器 - 它会崩溃。因为自动加载器试图加载 `string`,它并不关心它是否是类。
我找到了几种方法
1 - 取消注册 AL -> 检查 Ifaces -> 注册自动加载器

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

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