Ответы пользователя по тегу PHP
  • Как в php отделить объявление класса от его реализации?

    @balloon
    Мне кажется, что:
    1. В итоге Вы придете к абстрактному классу
    2. Все таки придеться создать dependency container, если вы не хотите что бы родительский класс знал о наследниках.

    abstract class DataKeeper {
      protected $data;
    
      public function setData($data) {
        $this->data = $data;
      }
    
      public function getData() {
        return $this->data;
      }
    
      abstract public function save()
      
      abstract public function process()
    }
    
    class FileDataKeeper extend DataKeeper {
    
      public function save() {
        // implementation
      }
    
      public function process() {
        // implementation
      }
    }
    
    class Container {
      protected static $classes = array();  
    
      public static function register($alias, $class) {
        self::$classes[$alias] = $class;    
      }
    
      public static function get($alias) {
        if (!isset(self::$classes[$alias]))
    	throw new Exception("...");      
    
        $className = self::$classes[$alias];
        return new $className();
      }
    }
    
    
    // bootstrap.php
    Container:register("dataKeeper", "FileDataKeeper");
    
    // SomeWhere.php
    $dataKeeper = Container::get("dataKeeper");
    
    Ответ написан
    Комментировать