Я новичок в PHP 5.6+, пытаюсь наверстать упущенное, хочу создать слой совместимости для приложения, рассмотрим следующий сценарий
// classA.php, a non spaced class
class A {
// ONLY fallback const + methods / work as just an alias for B (below)
}
// classAchild.php, a child non spaced class
class Achild extends A {
// ONLY fallback const + methods / work as just an alias for Bclass (below)
}
// B.php, a spaced class
namespace Abstract\Context;
class B {
// ALL const + methods
}
// Bchild.php, a child non spaced class
namespace Abstract\Context\B\Subcontext;
class Bchild extends B {
// ALL const + methods
}
Класс A
является версией PHP 4+ класса B, который является PHP 7+, функционально эти классы и их дочерние классы эквивалентны, однако в разных контекстах.
Позвольте мне объяснить:
- Сейчас я нахожусь в ситуации, когда мне нужно создать псевдоним в пространстве имен для
Bchild
на основе существующего Achild
.
- При работе в контексте, где пространство имен всех классов (последняя версия приложения),
B
всегда используется, но при работе в более старом приложении всегда присутствует Bchild
, чтобы заполнить содержимое для Achild
или иногда исправления это.
Примерно так:
if ( !class_exists('Abstract\Context\B\Subcontext\Bchild') ){
if ( !class_exists('Abstract\Context\B') ){
class 'Abstract\Context\B' extends A{} // define an alias for B with existing A
}
class 'Abstract\Context\B\Subcontext\Bchild' extends Achild{} // define an alias for Bclass with existing Achild
}
Если вы знаете, как это сделать, пожалуйста, дайте мне знать.