Php 在另一个类中调用另一个类函数

Php 在另一个类中调用另一个类函数,php,class,Php,Class,我到处找这个问题,但找不到答案。我试图调用另一个类中的另一个类函数。我的目标是拥有一个处理消息的全局类。我希望能够在其他类中添加消息。这就是我的例子 class Site { var $message; public function setMessage($string) { $this->message .= $string; } public function outputMessage($string) { echo $t

我到处找这个问题,但找不到答案。我试图调用另一个类中的另一个类函数。我的目标是拥有一个处理消息的全局类。我希望能够在其他类中添加消息。这就是我的例子

class Site {
    var $message;

    public function setMessage($string) {
      $this->message .= $string;
    }

    public function outputMessage($string) {
      echo $this->message;
    }

}
还有我的另一节课

class Company {
    var $name;

    public function setName($string) {
      $this->name.= $string;

      // TESTING HERE
      Site::setMessage("Company Set: " .$string);
    }
}
然后我有我的主页

$Site = new Site();
$Site->addMessage("Start");

$Company = new Company();
$Company->addName('Company X');

$Site->outputMessage();
我试图让我的屏幕显示“启动公司集合:公司X”。因此,该站点可以保存任何类需要存储的任何消息

我试着在没有任何运气的情况下将函数转换为静态函数。不管我怎么做,我都会犯一些错误

例如:
致命错误:访问未声明的静态属性:公司::$name

致命错误:不在对象上下文中使用$this


有人能给我指出正确的方向吗?

尽管我对这种模式有所保留,但你真的希望
站点
类成为一个单例:

class Site {
    private static $instance = new Site();

    public static getInstance() {
        return Site::$instance;
    }

    private $message;

    private function __construct() {

    }

    public function addMessage($message) {
        $this->message .= $message;
    }

    public static function addNewMessage($message) {
        $instance->addMessage($message);
    }
}

现在您可以使用
Site::addNewMessage(“…”)
或通过
Site::getInstance()
访问
Site的实例。我无法使上述工作正常进行。如果有人有别的办法,请告诉我。再次感谢你

class Company {
    private $Site;
    var $name;

    function __construct(Site $Site) {
        $this->Site = $Site;
    }

    public function addMessage ($string) {
        $this->Site->addMessage($string);
    }

    public function setName($string) {
        $this->name.= $string;

        // TESTING HERE
        $this->Site->addMessage($string);
    }
}

$Site = new Site();
$Site->addMessage("Start");

$Company = new Company($Site);
$Company->addName('Company X');

$Site->outputMessage();

首先-在
Site
类中没有
addMessage
方法。作为
Company
中的
addName
。第二,作为静态调用的方法,没有
这个
,如果您想从另一个类调用一个方法,您需要在尝试调用它之前包含该类。还要确保您调用的方法是
public
。对不起,这应该是setMessage。我已编辑问题以显示正确的功能。我尝试将setCompany更改为静态函数,并使用Address::company=$string;但我得到了另一个错误:致命错误:访问未声明的静态属性:Company::$name。目前,这些类也在同一个文件中。我想我不需要包含任何内容。
私有函数构造
@u\u mulder:谢谢你的关注。我总是搞砸PHP中的构造函数。谢谢大家的帮助。非常感谢。然而,我在课堂上的第一行上遇到了一个错误。解析错误:语法错误,意外的“new”(T_new)忘记了在PHP中不能这样做。我会马上更新我的答案。