gpt4 book ai didi

php - protected 构造函数是否被视为良好做法?

转载 作者:可可西里 更新时间:2023-11-01 12:57:14 25 4
gpt4 key购买 nike

我正在编写一些小助手类来处理树。基本上,我有一个节点和一个代表树的特殊根节点。我想让它保持通用和简单。这是代码的一部分:

<?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);

?>

我的问题:

  • 强制通过 TreeNode::addById() 创建 TreeNode 实例是否明智?
  • 如果是这样,将 TreeNode::__construct() 声明为私有(private)/ protected 是否是一种好的做法?

最佳答案

我认为在某些情况下控制对象的构造并隐藏公共(public)构造函数确实有意义。

您的代码也是如此:Tree 类控制其子级 TreeNode 的创建和初始化方式很有用,因为它需要控制添加节点的位置在树层次结构中。

如果类之间的关系使得一个类具有关于另一个类的信息,那么对对象构建进行这种控制就尤为重要。

例如:如果您稍微更改了实现并允许 Tree 类管理树中所有节点的节点 ID(您可以将它们存储在 Tree< 中的数组中类)。在这种情况下,让 Tree 控制如何创建和初始化 TreeNode 并通过 Tree 类上的方法执行此操作将非常有吸引力非常有道理。

关于php - protected 构造函数是否被视为良好做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com