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

时间:2012-08-26 05:50:56

标签: 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()。只能访问NodeGraph

感谢。

1 个答案:

答案 0 :(得分:3)

不,你不能这样做。您可以使用“hack”,如果传递给它的参数不是图形,则在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');
        } 
    }
}