我有两个实现相同接口的类。
在第一课中,我有一个名为author的数组变量。通常,为了在同一个类中的两个不同函数之间传递变量,我在设置后使用$this->author;
。
这似乎在两个类之间不起作用。有人可以澄清我如何在第二类中调用一级变量吗?
谢谢!
答案 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中的变量而不是重复您的代码,但我不太了解您的情况。所以这可能不是你想要的= /