【问题标题】:Calling Another Class Function Within Another Class在另一个类中调用另一个类函数
【发布时间】:2016-03-23 20:15:05
【问题描述】:

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

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

谁能指出我正确的方向?

【问题讨论】:

  • 首先 - Site 类中没有 addMessage 方法。作为addName 中的Company。第二 - 作为静态调用的方法 - 没有 this,
  • 如果你想从另一个类调用一个方法,你需要在尝试调用它之前包含那个类。还要确保你调用的方法是public
  • 对不起,这应该是 setMessage。我已经编辑了问题以显示正确的功能。我尝试将 setCompany 更改为静态函数并使用 Address::company = $string;但我收到另一个错误:致命错误:访问未声明的静态属性:Company::$name。目前,这些类也在同一个文件中。我认为我不需要包含任何内容。

标签: php class


【解决方案1】:

尽管我对这种模式有所保留,但您确实希望 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::getInstance() 访问Site 的实例。

【讨论】:

  • private function __construct
  • @u_mulder:感谢您的关注。我总是搞砸 PHP 中的构造函数。
  • 感谢大家帮助我。非常感谢。但是,我在课堂上的第一行出现错误。解析错误:语法错误,意外的“新”(T_NEW)
  • 忘记了你不能在 PHP 中做到这一点。稍后我会更新我的答案。
【解决方案2】:

我最终把这门课传给了另一个。我无法使上述工作。如果有人有其他方法,请告诉我。再次感谢。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2023-04-04
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多