我到处寻找这个问题,但无法得到答案。我试图在另一个类中调用另一个类函数。我的目标是拥有一个处理消息的全局类。我希望能够在其他类中添加消息。这是我与我合作的例子。
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
有人能指出我正确的方向吗?
答案 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();