Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将变量传递给类_Php_Inheritance - Fatal编程技术网

Php 将变量传递给类

Php 将变量传递给类,php,inheritance,Php,Inheritance,这是一个场景: 共有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类的值

这是一个场景:

共有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类的值,如下所示:

$b = new B();
$b->something1 = "XYZ";
$b->something2 = "ABC";
...... long list.....
$c->something1 = $this->something1;
$c->something2 = $this->something2 .....
class A {
    public static $foo;
}

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

# usage:
B::$foo = 'bar';
echo C::$foo; // will output 'bar'
现在我想要的是: 我想调用
类B
类C
的一些函数
我知道我可以通过在
类B
中创建这样的
$c=new c()对象来实现这一点

但是我还想传递
B
的所有变量,即(something1,something2…) 由程序传递到C类

我知道我可以这样做:

$b = new B();
$b->something1 = "XYZ";
$b->something2 = "ABC";
...... long list.....
$c->something1 = $this->something1;
$c->something2 = $this->something2 .....
class A {
    public static $foo;
}

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

# usage:
B::$foo = 'bar';
echo C::$foo; // will output 'bar'
但是,如果没有上述代码,是否可以这样做,因为
$c->somethingN
会占用太多的行,我不喜欢重复的代码

我只是想知道还有没有别的办法

我知道我可以通过在类B中创建一个对象来做到这一点,比如$c=newC()

如果这是实例成员(不是静态的),那么这就是方法


另一种方法是使用静态成员,如下所示:

$b = new B();
$b->something1 = "XYZ";
$b->something2 = "ABC";
...... long list.....
$c->something1 = $this->something1;
$c->something2 = $this->something2 .....
class A {
    public static $foo;
}

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

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

为什么不使用值数组而不是单个成员?然后可以将所有变量作为一个变量处理。或者,为这些值创建一个额外的“容器”类,以便您可以更轻松地处理和传递它们。事实上,你在类B中设置的值在类C中已经可用,因为你在类A中声明它们是公共的,这是由类B和C共同驱动的。容器类的概念看起来很有趣,你能举个例子吗?只是一个类“存储”或类似被动容器的东西。在一个类中创建一个实例,并将其作为对该实例的引用传递给其他对象。就这些。你为什么不从C继承B呢?谢谢你的回答,我不能让它是静态的,因为这将在代码中产生巨大的变化。我将带着我的旧想法去。有几种方法可以实现你想要的。但是继承将不适合(如果不是静态成员)。需要查看您的申请表才能提供建议。