하나의 시스템이 다른 시스템과 대화 할 수 있도록하는 클래스 버저 닝 시스템이 필요합니다. 장래의 변경으로 인해 이미 설치된 시스템에는 영향을 미치지 않습니다.하나의 클래스를 다른 클래스로 변환
시스템 A와 시스템 B가 RPC 호출을 통해 서로 대화한다고 가정 해 보겠습니다. 비즈니스 요구 사항 변경
다음
일하는 것이 이전 버전과 호환되는 동안 시스템 A와 B의 필요성이 미래의 발전을 위해 변경 될 :class base_version
{
public static function getVersion($version = 1)
{
$versionClass = 'version_'.$version;
return new $versionClass();
}
}
class version_1
{
public function sayHello()
{
echo "Hello version 1\n";
}
}
class version_2
{
public function sayHello()
{
echo "Hello version 2\n";
}
}
$obj = base_version::getVersion();
$obj->sayHello();
$obj = base_version::getVersion(2);
$obj->sayHello();
내가 그러나 정적 인스 턴싱을 좋아하지 않는다. 내가 무엇을하고 싶은지는 당신이 $this
을 재 할당 할 수 없다는 것을 제외하고는 이런 것입니다.
class base_version
{
public function __construct($version)
{
$versionClass = 'version_'.$version;
$this = new $versionClass();
}
}
$obj = new base_version();
$obj->sayHello();
$obj = new base_version(2);
$obj->sayHello();
어떻게하면됩니까?
인터페이스는 구현 세부 사항이없는 '계약'을 정의하므로 이상적입니다. '추상 클래스'는 일부 서클에서 '인터페이스'로 간주 되기는하지만. 몇 가지 정보 : [디자인을위한 원칙 - 패턴을위한 PHP 프로그램과 인터페이스가 아닌 구현] (http://www.php5dp.com/design-pattern-principles-for-php-program) 인터페이스가 아닌 구현 /) –