Я пишу пользовательскую систему расширения для php, которая позволяет определить класс с новой функцией для существующего класса и добавить указанные функции в класс после его определения.
Как уже говорилось, расширения записываются как отдельный класс, давайте назовем один 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);
Что мне интересно:
Есть ли способ «добавить тип к объекту»? Есть ли способ обмануть проверку типов, чтобы разрешить эти вызовы.
MyExtendedClass
, так как все классыMyExtension
будут расширятьMyExtendedClass
. Или, что еще лучше, вы можете создать интерфейс, который должен реализовывать все классы расширения и использовать этот интерфейс для подсказки типа. - person akDeveloper   schedule 20.11.2015extends
, а скорее о пользовательской системе расширений, которая может добавлять функциональность к классам после того, как они определены - person SomeNorwegianGuy   schedule 20.11.2015someFunction
будет принимать экземпляры классаMyExtension
и любой другой экземпляр класса, расширяющийMyExtension
. Есть ли причина, по которой вы хотите ввести дочерний класс подсказки, а не родительский класс? - person akDeveloper   schedule 20.11.2015