Php 在两个类之间传递变量

Php 在两个类之间传递变量,php,oop,Php,Oop,我有两个实现相同接口的类 在第一类中,我有一个名为author的数组变量。通常,为了在同一类中的两个不同函数之间传递变量,我使用$this->author一旦设置完毕 这在两个类之间似乎不起作用。有人能澄清一下我将如何调用第二类中第一类的变量吗 谢谢 用于面向对象设计概念的命名法 当您使用$this->author时,您不能在函数之间传递变量。这两个函数引用两个函数所属对象的同一变量 author是类的属性 没有一个地方可以放置一个变量并让它被两个不同的类引用。但是,您可以对一个类使用publi

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

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

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

谢谢

用于面向对象设计概念的命名法

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

author
是类的属性

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

公共财产

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

用于面向对象设计概念的命名法

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

author
是类的属性

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

公共财产

但是,这种技术并不能捕获引用公共属性的两个函数的方案。

您可以使用Traits(水平继承)

尽管只有当变量只被查询而不被修改时,它才会对您有所帮助。这是因为trait允许您指定静态属性,但是使用该trait的每个类都有这些属性的独立实例

这是一个例子:

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中的变量,而不是复制代码,但我不太理解您的情况。所以这可能不是你想要的=/

你可以使用Traits(水平继承)

尽管只有当变量只被查询而不被修改时,它才会对您有所帮助。这是因为trait允许您指定静态属性,但是使用该trait的每个类都有这些属性的独立实例

这是一个例子:

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中的变量,而不是复制代码,但我不太理解您的情况。所以这可能不是你想要的=/

在OOP中,你不能在同一个类中使用同一个变量,你应该有基类,这两个类都将扩展到基类并获取值您是否暗示了在类之间修改相同变量的情况?通过在实现相同接口的两个类之间传递变量,您试图实现什么目标?您必须将一个类作为父类,将第二个类作为子类。那么你就可以这么做了。这两个答案中的任何一个都好吗?在OOP中,不能在同一个类中使用同一个变量,应该有基类,这两个类都将扩展到基类并获取值您是否暗示了在类之间修改相同变量的情况?通过在实现相同接口的两个类之间传递变量,您试图实现什么目标?您必须将一个类作为父类,将第二个类作为子类。那么你就可以这么做了。这两个答案中的任何一个都好吗?你也没有写任何回应。