Piszę kilka małych klas pomocniczych do obsługi drzew. Zasadniczo mam węzeł i specjalny węzeł główny, który reprezentuje drzewo. Chcę zachować to ogólne i proste. Jest to część kodu:Czy chronieni konstruktorzy uważani są za dobrą praktykę?
<?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);
?>
Moje pytania:
- Czy to rozsądne, aby zmusić
TreeNode
przypadki, które mają być utworzone przezTreeNode::addById()
? - Jeśli tak, czy dobrze byłoby ogłosić, że
TreeNode::__construct()
jest prywatny/chroniony?