Php 考虑到从父类中调用子类的场景,子类可以与父类交互吗?
我不知道如何解释它,但是如果有一个B类被a类引用,B类是否可以与a类交互Php 考虑到从父类中调用子类的场景,子类可以与父类交互吗?,php,class,Php,Class,我不知道如何解释它,但是如果有一个B类被a类引用,B类是否可以与a类交互 class A { function A($name) { $this->name = $name; } function addB($name) { $this->b = new B($name); } } class B { function B($name) { $this->name = $name;
class A {
function A($name) {
$this->name = $name;
}
function addB($name) {
$this->b = new B($name);
}
}
class B {
function B($name) {
$this->name = $name;
echo $a->name; // should echo $name set on class A
}
}
$a = new A("x");
$a->addB("y");
您可以使用getter返回变量
class A {
private $myPrivateVar;
function __construct() {
$this->myPrivateVar = 100;
}
// Accessor (AKA getter)
public function getMyPrivateVar() {
return $this->myPrivateVar;
}
// Mutator (AKA setter)
public function setMyPrivateVar($newVar) {
$this->myPrivateVar = $newVar;
}
}
class B {
function __construct() {
$a = new A();
$thePrivateVarFromA = $a->getMyPrivateVar();
$newVal = $thePrivateVarFromA * 100;
$a->setMyPrivateVar($newVal);
}
}
请参阅答案以获取详细信息。回到这个问题,这就是我如何处理这篇文章中提出的问题,将父类引用发送到子类:
new\u child($name,$this)
:
class\u父级{
函数_父函数($name){
$this->name=“我是$name”;
$this->childs=array();
}
函数addToName($name){
$this->name.=“+父亲”$name;
}
函数addChild($name){
$this->childs[]=new\u child($name,$this);
}
}
班级儿童{
函数_子函数($name,$parent){
$this->name=“我是$name”;
$this->brothers=0;
$parent->addToName($name);
foreach($parent->childs as$child){
$child->hasBrother($name);
}
}
函数名($name){
$this->name.=“+$name的哥哥”;
$this->brothers=1;
}
}
$a=新母公司(“a”);
$a->addChild(“B1”);
$a->addChild(“B2”);
$a->addChild(“B3”);
回声“;印刷费($a);回声“;
欢迎评论 我如何从类B中访问getMyPrivateVar()?好的,我理解你的观点,但这不是我要问的。考虑到从类a中调用类B的场景,类B是否可以与类a相互关联?是的,您可以在类B中创建类a的实例变量,然后在a中创建一个新的B实例,并从a中设置变量。这些变量中的每一个都是新实例,并且彼此独立。但是,如果A包含一个静态变量,它将在类A的所有实例中共享,可以从B设置。这有意义吗?好的,这有意义,但仍然不是我想要实现的。我想知道是否有一种方法可以从类B内部(从类a现有实例调用)与现有的类a实例连接。创建类a的新实例不是我想要的。
class _parent {
function _parent($name) {
$this->name = "I'm $name";
$this->childs = array();
}
function addToName($name) {
$this->name .= " + father of " . $name;
}
function addChild($name) {
$this->childs[] = new _child($name, $this);
}
}
class _child {
function _child($name, $parent) {
$this->name = "I'm $name";
$this->brothers = 0;
$parent->addToName($name);
foreach ($parent->childs as $child) {
$child->hasBrother($name);
}
}
function hasBrother($name) {
$this->name .= " + older brother of $name";
$this->brothers = 1;
}
}
$a = new _parent("A");
$a->addChild("B1");
$a->addChild("B2");
$a->addChild("B3");
echo "<pre>"; print_r($a); echo "</pre>";