2013-04-13 38 views
0

这是情形:传递变量对类

有3类:类A,类B,C类

//A.php 
class A { 
public $something1; 
public $something2; 
//long list.... 

// i am the base class 
} 


//B.php 
class B extends A { 

// i am a child of A 
} 


//C.php 
class C extends A{ 

// i do the side work 
} 

该程序使一个对象并设置值类乙这样的:

$b = new B(); 
$b->something1 = "XYZ"; 
$b->something2 = "ABC"; 
...... long list..... 

现在我想的是: 我要打电话的0某些功能在class B
我知道我可以通过在class B中制作一个对象,例如$c = new C();

但我也想通过的B所有的变量,即(something1,something2 ....) 通过程序传递给class C

我知道我能做到这一点是这样的:

$c->something1 = $this->something1; 
$c->something2 = $this->something2 ..... 

但它是可以做到,如果没有上面的代码,因为
$c->somethingN只会走太多的线条和我不喜欢重复的代码。

我只想知道是否有其他方法。

+0

为什么不使用值,而不是单个成员的数组?然后你可以把所有的变量作为一个来处理或者为这些值创建一个额外的“容器”类,以便您可以更轻松地处理和传递它们。而且,实际上,您已经拥有了C类中设置的类B中的值,因为您已将它们声明为类A中的公共类,而类B和类C都是这两个类的派生类... – arkascha

+0

容器类的想法看起来很有趣,你能给个例子吗 ? –

+0

只是一个类“存储”或类似于被动容器的东西。您可以在一个类中创建一个实例,并将其作为对该实例的引用传递给其他对象。就这样。 – arkascha

回答

0

我知道我可以通过在类B中创建一个对象,像这样$ c = new C();.

如果这是实例成员(非静态),这是要走的路。


另一种方法是使用静态成员,像这样:

class A { 
    public static $foo; 
} 

class B extends A {} 
class C extends A {} 

# usage: 
B::$foo = 'bar'; 
echo C::$foo; // will output 'bar' 
+0

感谢您的答案,我不能让它成为静态的,因为这将在代码中发生巨大的变化。我会用我的旧主意 –

+0

好吧。有几种方法可以实现你想要的。但是继承不适合(如果不是静态成员)。需要看你的应用程序提供建议。 – hek2mgl