members)) { $this->generateMembersHash(); } return $this->members; } /** * Check if a specific member exists by name. * * @param string $name Name of the member to check * * @return bool */ public function hasMember($name) { return isset($this->definition['members'][$name]); } /** * Retrieve a member by name. * * @param string $name Name of the member to retrieve * * @return Shape * @throws \InvalidArgumentException if the member is not found. */ public function getMember($name) { $members = $this->getMembers(); if (!isset($members[$name])) { throw new \InvalidArgumentException('Unknown member ' . $name); } return $members[$name]; } private function generateMembersHash() { $this->members = []; foreach ($this->definition['members'] as $name => $definition) { $this->members[$name] = $this->shapeFor($definition); } } }