모든 기능이 동일한 모델 피어 클래스 그룹이 있습니다. 그룹에 새 클래스를 추가 할 때마다 각각을 복사하여 붙여 넣는 것이 아니라 모델 피어 클래스가 확장하는 클래스에 함수를 추가하는 것이 좋습니다. 불행하게도, 모델 피어 클래스가 BaseModelPeer
과 같은 Base 클래스에서 확장되었으므로 불가능합니다.Propel의 다중 기본 클래스에 기능 추가
Propel 1.5에는 basePeer 속성이 추가되어 있습니다.이 속성을 사용하면 BaseModelPeer
을 특정 클래스에서 확장 할 수 있습니다. 그러나 기본적으로 BaseModelPeer
클래스는 확장되지 않습니다. 대신, 함수에 대한 서명이 다른 BasePeer
클래스에 대한 모든 호출을 수행합니다. basePeer
속성을 변경하면 BaseModelPeer
이 새 클래스에서 확장되어 NewBasePeer
으로 전화하고 BasePeer
으로 전화를 NewBasePeer
으로 변경합니다. 시그니처가 다르기 때문에 이것이 단지 붕괴되도록합니다!
실제로 Symfony의 Zend Lucene tutorial에서 항목을 인덱싱 할 수있는 기능 중 일부를이 NewBasePeer
클래스로 이동하려고합니다. 이 기능 중 하나는 doDeleteAll
입니다.
을하지만이 함수 내에서이 같은 호출합니다 : :이 기능의 BaseModelPeer의 서명은 다음과 같습니다 BaseModelPeer는 BasePeer
를 확장하지 않기 때문에
$affectedRows += BasePeer::doDeleteAll(ModelPeer::TABLE_NAME, $con, ModelPeer::DATABASE_NAME);
, 그것은 괜찮습니다. 그러나 스키마에 basePeer
속성을 변경하여,에 함수 호출 변경 :
$affectedRows += NewBasePeer::doDeleteAll(ModelPeer::TABLE_NAME, $con, ModelPeer::DATABASE_NAME);
BaseModelPeer
지금은 doDeleteAll()
에 전화를 무시하는 의미 NewBasePeer
를 확장
BaseModelPeer
클래스는 이제 스스로 모순입니다!
Propel에서는 버그가 있습니까? 그렇지 않다면, 사람은 basePeer
속성을 어떻게 사용합니까?