私はこの質問をどこでも見てきましたが、答えを得ることができませんでした。私は別のクラス関数を別のクラス関数内で呼び出そうとしています。私の目標はメッセージを扱うグローバルクラスを持つことです。他のクラスの中にメッセージを追加できるようにしたい。これは私が働いている私の例です。別のクラス内の別のクラス関数を呼び出す
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" を言うために私の画面を取得しようとしています。したがって、このサイトは、クラスが保存する必要があるメッセージをすべて保持することができます。
私は幸運なしに静的なものに関数を回そうとしました。私が何を試しても、何らかのエラーが出ます。例については
:
致命的なエラー:宣言されていない静的プロパティへのアクセス:会社:: $名
致命的なエラー:いないオブジェクトコンテキスト
に誰もが正しい方向に私を指すことができるとき$これを使用します?
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
のインスタンスにアクセスすることができます。このパターンの私の予約にもかかわらず
まず、 'Site'クラスに' addMessage'メソッドはありません。 'Company'の' addName'として。 Second - 静的に呼び出されるメソッドとして - thisはありません。 –
別のクラスのメソッドを呼び出す場合は、呼び出す前にそのクラスをインクルードする必要があります。また、呼び出すメソッドが 'public'であることを確認してください。 – aphextwix
申し訳ありませんが、それはsetMessageとします。私は正しい機能を示すために質問を編集しました。私は静的関数にsetCompanyを変更しようとしました。 しかし、別のエラーが表示されます。致命的なエラー:宣言されていない静的プロパティ:Company :: $ nameへのアクセス。現在、これらのクラスは同じファイルにあります。私は何かを含める必要はないと思う。 – user1860996