Tengo un método que extrae un árbol transversal de árbol de preordenamiento modificado de la base de datos y lo filtra utilizando una función de devolución de llamada. Por ejemplo:¿Cómo debo PHPDoc una devolución de llamada?
/**
* Recursive function for building the Cas_Template_TreeNode.
*
* @static
* @param array $rows
* @param callback $filter A function to filter the tree by (return a value convertible to false to remove the item from the tree)
* @return array
*/
private static function MakeTreeGivenDbRows($rows, $filter = null)
{
if ($filter === null)
{
$filter = function($unused)
{
return true;
};
}
$result = array();
$childrenCount = 0;
for ($idx = 0; $idx < count($rows); $idx += $childrenCount + 1)
{
$current = $rows[$idx];
$childrenCount = self::ChildrenCountFromRow($current);
if (!$filter($current))
{
continue;
}
$childrenStartAt = $idx + 1;
$childRows = array_slice($rows, $childrenStartAt, $childrenCount);
$children = self::MakeTreeGivenDbRows($childRows, $filter);
$result[] = new Cas_Template_TreeNode(self::MakeNodeGivenDbRow($current), $children);
}
if (empty($result))
{
return null;
}
return $result;
}
No estoy seguro de lo que el PHPDoc debe ser para la variable $filter
- es una devolución de llamada, que es lo que he indicado, pero no estoy seguro si eso es correcto.
Además, cualquier otro comentario sobre la calidad (o falta de ella) en este código sería apreciado :)
gran pregunta. – zerkms