2012-06-03 28 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;