Newsgroup: it.comp.www.php
Titolo: Concatenare chiamate a metodi

Salve a tutti.
Ho un problema... Ho creato una classe del tipo
class Foo {
    var $biz;
    function getBiz() { return $this->biz; }
}
class Biz {
    var $data;
    function getData() { return $this->data; }
}
Quando provo a chiamare
   $foo->getBiz()->getData();
PHP mi da un errore. E' una cosa che non è possibile fare in PHP 4?
Grazie mille.
Mauro.

   $foo->getBiz()->getData();
come fai a chiamare getData che fa parte di un altra classe?
al limite credo potresti fare:
$foo=new Foo;
$foo->biz=new Biz;
 e poi chiamare il tuo getData con
$foo->biz->getData();

 $foo->biz->getData();
Il problema è che getBiz() io l'ho inserito proprio per creare una
sorta di "incapsulamento" della proprietà biz e non voglio accedervi
direttamente a tramite il metodo getter.
Mauro.

direttamente a tramite il metodo getter.
vabbe' che di classi non ci capisco una mazza, ma cosi' come hai scritto non 
mi pare proprio che hai incapsulato qualche cosa.  sono due classi separate 
con nulla in comune :O

 con nulla in comune :O
Non è vero che non hanno nulla in comune... le due classi sono in
relazione tra di loro, infatti Foo contiene un'istanza di Biz.
Chiaramente non essendo PHP un linguaggio strettamente tipizzato, dal
codice sorgente questo non si evince.
"biz" contiene un oggetto perché se io scrivo qualcosa del tipo...
$foo = new Foo;
$foo->biz = new Biz;
e poi
$tmpBiz = $foo->getBiz();
echo $tmpBiz->getData();
non ho assolutamente problemi, mentre se scrivo
echo $foo->getBiz()->getData();
mi viene generato un errore. Dove sta la differenza? Che passo per una
variabile ($tmpBiz)?
Mauro

 direttamente a tramite il metodo getter.
[quoto]
class Foo {
     var $biz;
     function getBiz() { return $this->biz; }
}
class Biz {
     var $data;
     function getData() { return $this->data; }
}
[/quoto]
mi dici dov'č il tuo incapsulamento .. ??? ma in definitiva dicci di 
preciso cosa devi fare .. ;)
-- 
!!! OFFERTA IRRIPETIBILE !!! Muori oggi avrai uno sconto del 50%
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

 preciso cosa devi fare .. ;)
Voglio semplicemente fare questo:
class Foo {
     var $biz;
    function getBiz() { return $this->biz; }
    function setBiz($biz) { $this->biz = $biz; }
}
class Biz {
    var $data;
    function getData() { return $this->data; }
    function setData($data) { $this->data = $data; }
}
$foo = new Foo;
$biz = new Biz;
$biz->setData('Dato');
$foo->setBiz($biz);
...
echo $foo->getBiz()->getData().
E mi aspetto come output la stringa "Dato".
Cioè voglio solamente sapere se è possible in PHP chiamare un metodo
su un oggetto restituito da una chiamata ad un metodo senza passare per
una variabile temporanea.
Mauro.

 $biz->setData('Dato');
ma gia qui non vedrai mai il setData in quanto lo hai creato in una 
classe diversa .. quindi lo scope della tua variabile $biz della classe 
foo non č lo stesso (e tra l'altro non č neanche lo stesso oggetto) 
della classe biz
http://it.php.net/manual/it/ref.classobj.php
leggiti meglio questo .. e prova ad estendere la tua classe di base con 
i metodi di cui hai bisogno ..
-- 
SEZIONE OMICIDI: Nuova strepitosa offerta, porta 2 amici e vinci. 3 
suocere al prezzo di 2.


variabile ($tmpBiz)?
...e ti meravigli che ci sia un errore???     in quel modo non potra' mai 
funzionare (almeno in php4)


NI, non ricordo esattamente da quale versione ma credo dalla 5.0 o 5.1.
Ciao.