Escribo algunas pequeñas clases de ayuda para manejar árboles. Básicamente, tengo un nodo y un nodo raíz especial que representa el árbol. Quiero mantenerlo genérico y simple. Esto es parte del código:¿Los constructores protegidos se consideran buenas prácticas?
<?php
class Tree extends TreeNode{
public function addById($node_id, $parent_id, $generic_content){
if($parent = $this->findNodeById($parent_id)){
$parent->addChildById($node_id, $generic_content);
}
}
}
class TreeNode{
public function __construct($node_id, $parent_id, $generic_content){
// ...
}
protected function addChildById($node_id, $generic_content){
$this->children[] = new TreeNode($this->node_id, $node_id, $generic_content);
}
}
$Categories = new Tree;
$Categories->addById(1, NULL, $foo);
$Categories->addById(2, NULL, $bar);
$Categories->addById(3, 1, $gee);
?>
Mis preguntas:
- ¿Es sensato para forzar
TreeNode
casos que se crean a través deTreeNode::addById()
? - Si es así, ¿sería una buena práctica declarar
TreeNode::__construct()
como privado/protegido?