【发布时间】:2016-02-23 10:19:35
【问题描述】:
我正在为 php 编写一个 custom 扩展系统,它允许为现有类定义具有新函数的类,并在定义后将所述函数添加到类中。
如前所述,扩展是作为一个单独的类编写的,让我们调用一个MyExtension,并且可以说这个扩展扩展到现有的类MyExtendedClass1 和MyExtendedClass2。所以MyExtension给MyExtendedClass1和MyExtendedClass2添加了一些函数。
我想要做的是允许用户基于 MyExtension 键入提示。
// $object is guaranteed to either be an instance of MyExtension
// or be a class that is extended with MyExtension
function someFunction(MyExtension $object) {
}
$post = new MyExtendedClass1(); // Is extended by MyExtension
someFunction($post);
$post = new MyExtendedClass2(); // Is extended by MyExtension
someFunction($post);
我想知道的是:
有没有办法“向对象添加类型”?有什么办法可以欺骗类型检查以允许这些调用。
【问题讨论】:
-
这对你还没有用吗? This is already supported behavior
-
您可以使用
MyExtendedClass作为类型提示,因为所有MyExtension类都将扩展MyExtendedClass。或者更好的是,您可以创建一个应该实现所有扩展类的接口并将该接口用于类型提示。 -
在 PHP 中这称为 类型提示。更多信息可以在 PHP 网站上找到:Type declarations
-
@castis 我不是在谈论 php 的 OOP
extends功能,而是一个自定义扩展系统,可以在定义后向类添加功能 -
@akDeveloper 我已编辑问题以使用不适用的示例
标签: php types type-conversion strong-typing