在两个类之间传递变量


Passing Variables Between Two Classes

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

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

这在两个班之间似乎不起作用。有人能澄清一下我将如何调用第二类中第一类的变量吗?

谢谢!

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

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

author是类的一个属性。

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

http://php.net/manual/en/language.oop5.visibility.php公共财产。

但这种技术并不能捕捉到两个函数引用一个公共属性的方案。

您可以使用特性(水平继承)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中的变量,而不是重复您的代码,但我不太理解您的情况。因此,这可能不是您想要的=/