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;