在
PHP中给出以下内容:
<?PHP class foo { public $bar; function __construct() { "Foo Exists!"; } function magic_bullet($id) { switch($id) { case 1: echo "There is no spoon! "; case 2: echo "Or is there... "; break; } } } class bar { function __construct() { echo "Bar exists"; } function target($id) { echo "I want a magic bullet for this ID!"; } } $test = new foo(); $test->bar = new bar(); $test->bar->target(42);
我想知道’bar’类是否可以调用’foo’类的’magic bullet’方法. ‘bar’实例包含在’foo’实例中,但与它没有父/子关系.实际上,我有很多不同的“条形”类,“foo”在一个数组中,每个类都有一些与$id不同的东西,然后想要将它传递给“magic_bullet”函数以获得最终结果,因此禁止结构更改类关系,是否可以访问“容器”实例的方法?
您必须修改代码才能提供关系.在OOP中,我们称之为
aggregation.
假设PHP 4,以及“一系列条形图”的想法
<?PHP class foo { var $bars = array(); function __construct() { "Foo Exists!"; } function magic_bullet($id) { switch($id) { case 1: echo "There is no spoon! "; case 2: echo "Or is there... "; break; } } function addBar( &$bar ) { $bar->setFoo( $this ); $this->bars[] = &$bar; } } class bar { var $foo; function __construct() { echo "Bar exists"; } function target($id){ if ( isset( $this->foo ) ) { echo $this->foo->magic_bullet( $id ); } else { trigger_error( 'There is no foo!',E_USER_ERROR ); } } function setFoo( &$foo ) { $this->foo = &$foo; } } $test = new foo(); $bar1 = new bar(); $bar2 = new bar(); $test->addBar( $bar1 ); $test->addBar( $bar2 ); $bar1->target( 1 ); $bar1->target( 2 );