PHP定义一个类只允许被另一个类实例化

标签 php oop inheritance

PHP中有没有办法让一个类只允许被另一个类实例化?例如:

<?php 
    class Graph {
        private $nodes;

        public function __construct() {
            $this->nodes = array();
        }

        public function add_node() {
            $this->nodes[] = new Node();
        }
    }

    class Node {
        public function __construct() {
        }
    }
?>

在我的示例中,我想阻止直接调用new Node()。仅应从 Graph 类访问 Node

谢谢。

最佳答案

不,你不能这么做。您可以使用“hack”,如果传递给 Node 构造函数的参数不是图形,则在 Node 构造函数中抛出异常

class Node {
    public function __construct() {
        if(func_get_num_args() < 1 && !(func_get_args(0)instanceof Graph)){
           throw BadCallException('You can\'t call Node outside a Graph');
        } 
    }
}

关于PHP定义一个类只允许被另一个类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127917/

相关文章:

php - 网站管理员通过什么方式进入控制面板?

php - 为什么没有构造函数子类不能访问父类属性?

java - 如何在 Java 中创建 GUI?

oop - 有什么好的面向对象编程书籍可以为 OOP 打下良好、坚实的基础?

c++ - 需要关于多重继承和可选函数覆盖 C++ 的建议

python - 类可以从不同的文件继承方法(或子类)吗?这是 "Pythonic"吗?

php - 没有HTTPS登录,如何安全?

php - 在 Yii 2.0 (Menu::Widget) 中使用跨度?

java - 隐藏在 C# 和 Java 中的基方法

php - 如何在php中比较数组和数据库