2016-03-23 22 views
0

私はこの質問をどこでも見てきましたが、答えを得ることができませんでした。私は別のクラス関数を別のクラス関数内で呼び出そうとしています。私の目標はメッセージを扱うグローバルクラスを持つことです。他のクラスの中にメッセージを追加できるようにしたい。これは私が働いている私の例です。別のクラス内の別のクラス関数を呼び出す

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のインスタンスにアクセスすることができます。このパターンの私の予約にもかかわらず

+0

まず、 'Site'クラスに' addMessage'メソッドはありません。 'Company'の' addName'として。 Second - 静的に呼び出されるメソッドとして - thisはありません。 –

+0

別のクラスのメソッドを呼び出す場合は、呼び出す前にそのクラスをインクルードする必要があります。また、呼び出すメソッドが 'public'であることを確認してください。 – aphextwix

+0

申し訳ありませんが、それはsetMessageとします。私は正しい機能を示すために質問を編集しました。私は静的関数にsetCompanyを変更しようとしました。 しかし、別のエラーが表示されます。致命的なエラー:宣言されていない静的プロパティ:Company :: $ nameへのアクセス。現在、これらのクラスは同じファイルにあります。私は何かを含める必要はないと思う。 – user1860996

答えて

0

、あなたは本当にSiteクラスはシングルトンになりたいです。

+0

'private function __construct' –

+0

@u_mulder:それをキャッチしてくれてありがとう。私はいつもPHPのコンストラクタを壊してしまいます。 –

+0

私を助けてくれてありがとう、ありがとう。非常に高く評価。 しかし、あなたはクラス内にある最初の行にエラーが表示されます。解析エラー:構文エラー、予期しない 'new'(T_NEW) – user1860996

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(); 
関連する問題