protected function get_components() {
		$components = ( new \ReflectionClass( $this ) )->getProperties();
		$components = array_map(
		/**
		 * @param \ReflectionProperty $property
		 *
		 * @return string
		 */
			function ( $property ) {
				return $property->name;
			}, $components );
		$components = array_filter( $components, [ $this, 'is_component' ] );
		$components = array_map(
		/**
		 * @param \ReflectionProperty $component
		 *
		 * @return Component
		 */
			function ( $component ) {
				$getter = "get_{$component}";

				return $this->$getter();
			}, $components );

		return $components;
	}
protected function get_components() {
		$components = ( new \ReflectionClass( $this ) )->getProperties();
		$components = array_map(
		/**
		 * @param \ReflectionProperty $property
		 *
		 * @return string
		 */
			function ( $property ) {
				return $property->name;
			}, $components );
		$components = array_filter( $components, [ $this, 'is_component' ] );
		$components = array_map(
		/**
		 * @param \ReflectionProperty $component
		 *
		 * @return Component
		 */
			function ( $component ) {
				$getter = "get_{$component}";

				return $this->$getter();
			}, $components );

		return $components;
	}
protected function get_components ( ) { $ components = ( new \ ReflectionClass ( $ this ) ) -> getProperties ( ) ; $ components = array_map ( /**
		 * @param \ReflectionProperty $property
		 *
		 * @return string
		 */ function ( $ property ) { return $ property -> name ; } , $ components ) ; $ components = array_filter ( $ components , [ $ this , 'is_component' ] ) ; $ components = array_map ( /**
		 * @param \ReflectionProperty $component
		 *
		 * @return Component
		 */ function ( $ component ) { $ getter = "get_{$component}" ; return $ this -> $ getter ( ) ; } , $ components ) ; return $ components ; }
Get all components with a getter and that uses the Component trait

@return array|\ReflectionProperty[]
Get all components with a getter and that uses the Component trait