在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()
。只能访问Node
类Graph
。
感谢。
答案 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');
}
}
}