Skip to content
← Back to Snippets
Code

Composition Pattern Without Inheritance

Composes one result array from independent ship, crew, and mission arrays instead of using inheritance or parent classes.

Purpose

Composes one result array from independent ship, crew, and mission arrays instead of using inheritance or parent classes.

Snippet details

ContextData PatternLevelProductionCopy-and-paste statusMarked safe after review.

Categories

  • Forms and Validation

Code

<?php

/*
 * Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
 * Free for personal and internal use. Paid project use requires visible credit
 * to Jeffery L. Paris. Corporate use requires a paid license fee unless a
 * separate written license states otherwise.
 */

/**
 * Composition Pattern Without Inheritance.
 *
 * Purpose:
 * Combines separate procedural data blocks into one composed result.
 *
 * @param array $ship Ship data.
 * @param array $crew Crew data.
 * @param array $mission Mission data.
 * @return array Composed mission asset.
 */
function ogSnippetCompositionPatternWithoutInheritance(array $ship, array $crew, array $mission): array {
	$composed = array(
		'ship' => array(),
		'crew' => array(),
		'mission' => array(),
		'ready' => false
	);

	$composed['ship'] = array(
		'name' => '',
		'class' => '',
		'ready' => false
	);

	if (isset($ship['name']) === true) {
		$composed['ship']['name'] = trim((string) $ship['name']);
	}

	if (isset($ship['class']) === true) {
		$composed['ship']['class'] = trim((string) $ship['class']);
	}

	if (isset($ship['ready']) === true) {
		$composed['ship']['ready'] = (bool) $ship['ready'];
	}

	$composed['crew'] = array(
		'captain' => '',
		'count' => 0
	);

	if (isset($crew['captain']) === true) {
		$composed['crew']['captain'] = trim((string) $crew['captain']);
	}

	if (isset($crew['count']) === true) {
		$crew_count = (int) $crew['count'];

		if ($crew_count >= 0) {
			$composed['crew']['count'] = $crew_count;
		}
	}

	$composed['mission'] = array(
		'name' => '',
		'priority' => 'normal'
	);

	if (isset($mission['name']) === true) {
		$composed['mission']['name'] = trim((string) $mission['name']);
	}

	if (isset($mission['priority']) === true) {
		$priority = strtolower(trim((string) $mission['priority']));

		if ($priority === 'low' || $priority === 'normal' || $priority === 'high') {
			$composed['mission']['priority'] = $priority;
		}
	}

	if ($composed['ship']['ready'] === true && $composed['crew']['count'] > 0 && $composed['mission']['name'] !== '') {
		$composed['ready'] = true;
	}

	return $composed;
}

$mission_asset = ogSnippetCompositionPatternWithoutInheritance(
	array('name' => 'Rocinante', 'class' => 'corvette', 'ready' => true),
	array('captain' => 'James Holden', 'count' => 4),
	array('name' => 'Ganymede recovery', 'priority' => 'high')
);

$asset_ready = 'no';

if ($mission_asset['ready'] === true) {
	$asset_ready = 'yes';
}

echo 'Composed asset ready: '.$asset_ready;