2016-03-23 18 views
0

Bu soru için her yere baktım ama cevap alamadım. Başka bir sınıfta başka bir sınıf fonksiyonunu aramaya çalışıyorum. Amacım, iletileri işleyen global bir sınıfa sahip olmak. Diğer sınıfların içine mesaj ekleyebilmek istiyorum. Bu benim çalıştığım örneğim.Başka Sınıfta Başka Sınıf Fonksiyonu Aranıyor

class Company { 
    var $name; 

    public function setName($string) { 
     $this->name.= $string; 

     // TESTING HERE 
     Site::setMessage("Company Set: " .$string); 
    } 
} 

class Site { 
    var $message; 

    public function setMessage($string) { 
     $this->message .= $string; 
    } 

    public function outputMessage($string) { 
     echo $this->message; 
    } 

} 

Ve diğer sınıf Sonra ben ": Şirket X Başlangıç ​​Firma Set" söylemek benim ekranını almaya çalışıyorum benim ana sayfa

$Site = new Site(); 
$Site->addMessage("Start"); 

$Company = new Company(); 
$Company->addName('Company X'); 

$Site->outputMessage(); 

var. Böylece site, herhangi bir sınıfın depolaması gereken iletileri saklayabilir.

Bu işlevi, herhangi bir şans olmaksızın statik olana döndürmeyi denedim. Ne denediğim önemli değil, bir çeşit hata alıyorum. Örnek için

:
Ölümcül hata: bildirilmemiş statik özelliğine Erişim: Şirket :: $ name

Ölümcül hata: $ kullanmak, bu değilken nesne bağlamında

kimse doğru yönde işaret edebilir ?

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

Şimdi Site::addNewMessage('...') kullanın veya Site::getInstance() aracılığıyla Site örneğini erişebilir: Bu desen benim çekinceleri olmasına rağmen

+0

Her şeyden önce - Site' sınıfında 'addMessage' yöntemi yoktur. Şirket içinde "addName" olarak. İkincisi - statik olarak adlandırılan yöntem olarak - bu yoktur, bu "0", –

+0

Başka bir sınıftan bir yöntem aramak istiyorsanız, bu sınıfı eklemeyi denemeden önce eklemeniz gerekir. Ve ayrıca aradığınız yöntemin "public" olduğundan emin olun. – aphextwix

+0

Özür dileriz, bu setMessage olduğunu varsayalım. Soruyu doğru işlevi gösterecek şekilde düzenledim. SetCompany'i statik bir işleve değiştirmeyi ve Adres :: company = $ string kullanmayı denedim; Ancak başka bir hata alıyorum: Önemli hata: Bildirilmemiş statik özelliğe erişim: Şirket :: $ name. Ayrıca, şu anda bu sınıflar aynı dosyadadır. Hiçbir şey eklemem gerektiğini sanmıyorum. – user1860996

cevap

0

, gerçekten Site sınıf bir tekil olmak istiyorum.

+0

'private function __construct' –

+0

@u_mulder: Bunu yakaladığınız için teşekkür ederiz. Ben her zaman PHP'deki kurucuları mahvederim. –

+0

Bana yardım etmeye çalıştığınız için hepinize teşekkür ederim. Çok müteşekkirim. Ancak, sınıfın içinde ilk satırda bir hata alıyorum. Ayrıştırma hatası: sözdizimi hatası, beklenmedik 'yeni' (T_NEW) – user1860996

0

Sınıfı öbürüne geçirmeyi bitirdim. Yukarıdaki çalışmayı alamadım. Başka birinin başka yolu varsa lütfen bana bildirin. Tekrar teşekkürler.

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(); 
İlgili konular