2012-08-26 61 views
2

PHP中有一種方法可以讓一個類只允許被另一個類實例化嗎?例如: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

這樣做的原因是什麼? –

+0

這是毫無意義的。我可以看到用例是你必須確定你的節點鏈接到一個圖表,但爲什麼有什麼不能訪問它?你想在java中創建「私有」類。但在PHP類中沒有可見性,就像在C++中一樣。 – artragis

回答

3

不,你不能這樣做。如果傳遞給它的參數不是圖的話,你可以使用一個「黑客」,它包含在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'); 
     } 
    } 
} 
+0

+1。我錯讀了這個問題。這是正確的答案。 – Brad

相關問題