在两个类之间传递变量

时间:2016-01-12 21:50:14

标签: php oop

我有两个实现相同接口的类。

在第一课中,我有一个名为author的数组变量。通常,为了在同一个类中的两个不同函数之间传递变量,我在设置后使用$this->author;

这似乎在两个类之间不起作用。有人可以澄清我如何在第二类中调用一级变量吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

http://php.net/manual/en/language.oop5.php用于面向对象设计概念的编写。

使用$this->author时,不会在函数之间传递变量。这两个函数引用了两个函数所属的对象的相同变量。

author是该类的属性。

没有地方可以放置变量并让它由两个不同的类引用。但是,您可以在一个类上使用public属性,并从任何其他类引用该属性。

公共财产的

http://php.net/manual/en/language.oop5.visibility.php

但是这种技术并没有捕获你使用引用公共属性的两个函数的方案。

答案 1 :(得分:1)

您可以使用Traits(水平继承)http://php.net/manual/es/language.oop5.traits.php

虽然只会咨询您的变量并且不进行修改,但它只会对您有所帮助。那是因为,traits允许你指定静态属性,但是使用该trait的每个类都有这些属性的独立实例。

http://php.net/manual/es/language.oop5.traits.php#107965

这是一个例子:

trait myTrait {
  public $sameVariable = 'shared';

    public function getMessage() { 
        echo $this->sameVariable;
    }
}

class A {
    use myTrait;
    public function getMessageA() { 
        echo $this->sameVariable;           //Prints shared
        $this->sameVariable = 'changed';
        echo $this->sameVariable;           //prints changed
    }
}


class B {
    use myTrait;
    public function getMessageB() { 
        echo $this->sameVariable;           //Prints shared
    }
}

$a = new A();
$b = new B();

$a->getMessageA();
$b->getMessageB();

这允许您重复使用Trait中的变量而不是重复您的代码,但我不太了解您的情况。所以这可能不是你想要的= /