/** * @param WritableInterface $writable * @return WritableInterface[] */ public function flattenWritables(WritableInterface $writable) { $writables = [$writable]; if ($writable instanceof WritableBearerBearerInterface || $writable instanceof WritableBearerInterface) { if ($writable instanceof WritableBearerBearerInterface) { $writables[] = $writable->getWritableBearer(); } foreach ($writable->getWritables() as $child) { $writables = array_merge($writables, $this->flattenWritables($child)); } } return $writables; }