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

时间:2016-03-23 20:15:05

标签: php class

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

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"。因此,该网站可以保留任何类需要存储的任何消息。

我试过把这个功能变成一个没有运气的静态功能。无论我尝试什么,我都会遇到一些错误。

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

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

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

2 个答案:

答案 0 :(得分:0)

尽管我对此模式有所保留,但您确实希望Site类成为单身:

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访问Site::getInstance()的实例。

答案 1 :(得分:0)

我最后将课程传递给了另一个。我无法完成上述工作。如果有人有任何其他方式,请告诉我。再次感谢你。

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();