Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> odwoływanie się do priv pola, które jest obiektem
dag
post
Post #1





Grupa: Zarejestrowani
Postów: 180
Pomógł: 0
Dołączył: 24.12.2003

Ostrzeżenie: (0%)
-----


Najpierw podam kod:

Klasa String:
  1. <?php
  2. class String {
  3. private $sTxt;
  4.  
  5. public function set( $sTxt ) {
  6. $this->sTxt= $sTxt;
  7. }
  8.  
  9. public function get() {
  10. return $this->sTxt;
  11. }
  12.  
  13.  
  14. public function length() {
  15. return strlen( $this->sTxt );
  16. }
  17.  
  18. public function __toString() {
  19. return $this->get();
  20. }
  21. }
  22.  
  23. ?>


Klasa Coment:
  1. <?php
  2. class Comment {
  3. private $title;
  4.  
  5. public function __construct() {
  6. $this->title = new String();
  7. }
  8.  
  9. public function __call( $sName, $aArguments ) {
  10. return $this->$sName;
  11. }
  12.  
  13. }
  14. ?>


Odwołanie:
  1. <?php
  2. $c1 = new Comment();
  3. $c1->title()->set('jakis tytul');
  4. echo'Dlugosc tekstu to ' . $c1->title()->length() . ' znakow';
  5.  
  6. ?>


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:
  1. <?php
  2. $c1 = new Comment();
  3. $c1->title->set('jakis tytul');
  4. echo'Dlugosc tekstu to ' . $c1->title->length() . ' znakow';
  5.  
  6. ?>

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:
  1. <?php
  2. class Comment {
  3. public function __construct() {}
  4. public function __construct( $sTitle ) {}
  5. public function __construct( $sTitle, $sBody ) {}
  6. }
  7. ?>

Jestem ciekaw jak sobie radzicie z tym problemem.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:45