Klasa String:
<?php class String { private $sTxt; public function set( $sTxt ) { $this->sTxt= $sTxt; } public function get() { return $this->sTxt; } public function length() { } public function __toString() { return $this->get(); } } ?>
Klasa Coment:
<?php class Comment { private $title; public function __construct() { $this->title = new String(); } public function __call( $sName, $aArguments ) { return $this->$sName; } } ?>
Odwołanie:
<?php $c1 = new Comment(); $c1->title()->set('jakis tytul'); ?>
Zastosowałem tutaj IMHO brzydkie rozwiązanie z użyciem metody __call.
Innym rozwiązaniem jest zastosowanie public $title. Wówczas odwoływalibyśmy się w ten sposób:
<?php $c1 = new Comment(); $c1->title->set('jakis tytul'); ?>
Czyli bez użycia title(). Jednak chyba nie jest to zbyt dobry pomysł ponieważ zmienna będzie publicznie dostępna, a takto mamy tylko dostęp do jej metod (title->set, title->length, etc.), więc nie można jej np. usunąć z zewnątrz.
Żeby nie zakładać nowego tematu napiszę, że brakuje mi bardzo przeładowywania metod w taki oto sposób:
<?php class Comment { public function __construct() {} public function __construct( $sTitle ) {} public function __construct( $sTitle, $sBody ) {} } ?>
Jestem ciekaw jak sobie radzicie z tym problemem.