SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...

Как реализовать расширение классов библиотеки?

Фреймворк Kohana имеет следующий механизм расширения классов:
Основной файл, содержащий код класса, kohana/classes/Kohana_Test.php:
<?php
class Kohana_Test
{
   public function __construct()
   {
        echo 'kohana/classes/Kohana_Test.php';
   }
}

Переопределенный в приложении класс, app/classes/Test.php:
class Test extends Kohana_Test {
   public function __construct()
   {
        echo 'app/classes/Test.php';
   }
}

Класс - "пустышка", используется когда класс не переопределен, kohana/classes/Test.php:
class Test extends Kohana_Test
{
}

Такой подход позволяет изменять класс Test без лишних правок в файлах использующих его:
$obj = new Test; // 'app/classes/Test.php'

Есть ли аналоги для данного механизма, позволяющие избавиться от классов - "пустышек"?
Как добиться подобного эффекта при использовании например фреймворка Zend?
  • Вопрос задан
  • 2348 просмотров
Решения вопроса 1
SilenceOfWinter
@SilenceOfWinter Автор вопроса
та еще зажигалка...
<?php

function autoload($class)
{
    $prefix = 'Enso_';
    $file = $class . '.php';

    if (file_exists($file)) {
        include $file;
    } elseif (file_exists($prefix . $file)) {
        include $prefix . $file;
        class_alias($prefix . $class, $class);
    } else {
        return false;
    }
}

spl_autoload_register('autoload');

$obj = new Abc;
$obj = new Test;
$obj = new Enso_Test;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Keanor
@Keanor
Ведущий разработчик
Не совсем понятен вопрос, если вам ненужно ничего переопределять или добавлять то зачем нужны пустышки?

ZF2 завязан на ServiceManager, зависимости получаются из него по ключу. Значения ключа можно переопределять в приложении, если вам это нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы