2012-06-03 54 views
1

我有一個類創建另一個類的實例。第二個類是否可能從調用類中檢索參數?如何獲取調用類的參數

例如

Class_A { 
    protected $myArray = array('item 1', 'item2', 'item3') 

    public function __construct() 
    { 
     $nextClass = new ClassB(); 
     echo $nextClass->countArrayItems(); 
    } 
} 

Class_B { 
    public function countArrayItems() 
    { 
     return count(Class_A->myArray); 
    } 
} 

$newClass = new Class_A; 

回答

3

你可以傳遞引用您Class_A實例您Class_B構造:

Class_A { 
    public $myArray = array('item 1', 'item2', 'item3') 

    public function __construct() 
    { 
     $nextClass = new Class_B($this); 
     echo $nextClass->countArrayItems(); 
    } 
} 

Class_B { 
    public function __construct($classA_instance) { 
     $this->classA_instance = $classA_instance; 
    } 
    public function countArrayItems() 
    { 
     return count($this->classA_instance->myArray); 
    } 
} 

$newClass = new Class_A; 

(如@克里斯,Class_A-> myArray的注意必須是公共)

+0

我同意這將是去這裏的路。這種模式被稱爲http://en.wikipedia.org/wiki/Dependency_injection –

+1

我會進一步定義一個接口並強制類實例匹配它。 'function __construct(ClassA $ classA){...}' – Xeoncross

+1

請注意'$ myArray'需要聲明爲public。 – goat

1

只有當您將A級實例傳遞給B級時

Class_A { 
    protected $myArray = array('item 1', 'item2', 'item3') 

    public function __construct() 
    { 
     $nextClass = new ClassB(); 
     echo $nextClass->countArrayItems($this); 
    } 
} 

Class_B { 
    public function countArrayItems($callingClass) 
    { 
     return count($callingClass->myArray); 
    } 
} 


$newClass = new Class_A;