hu_ha Posted July 20, 2004 Report Share Posted July 20, 2004 Tad nu ar abām rokām un kājām metos OOP virzienā. Vienkāršas klases, kas tiek izmantotas vienas, vai atvasinātās klases ir skaidras. Bet problēmas rodas, kad ir izveidots objekts un nepieciešams ar citas klases funkciju iegūt vērtības no šī objekta. Izveidoju divas testa klases A un B: class A { var $a1; function A () { return $this->a1=55; } function getA() { return $this->a1; } function setA($a) { $this->a1=$a; } function echoA() { echo 'A1 ir: '.$this->a1.'<br/>'; } function &instance(){ static $instance=false; if(!$instance){ $instance = new A(); } return $instance; } } //class a beigas class B { var $b1; var $b2; function B() { $this->b1=10; $this->b2=20; } function setB() { $this->b1=30; $aa=A::instance(); //variants 1 $this->b2=$aa->getA(); $aa= new A(); //variants 2 $this->b2=$aa->getA(); $this->b2=A::getA(); //variants 3 } function setB2($b) { $this->b2=$b; } function echoB() { echo 'B1 ir: '.$this->b1.'<br/>'; echo 'B2 ir: '.$this->b2.'<br/>'; } } //class B beigas Kas tiek izsauktas sekojoši $a = new A(); $a->echoA(); $a->setA(100); $a->echoA(); $b = new B(); $b->echoB(); $b->setB(); $b->echoB(); Dodot rezultātu: A1 ir: 55 //konstruktors A1 ir: 100 //izmana veertiibu B1 ir: 10 //konstruktors B2 ir: 20 //konstruktors B1 ir: 30 // funkcija setB(); B2 ir: 55 // funkcija setB(); vajag lai buutu 100 Jautājums sekojošs: Izveidoju objektu A, kur tiek klases mainīgā a1 vērtība piešķirta 100. Izveidoju objektu B un vēlos ar funkciju setB() piešķir b2 vērtību tādu, kāda ir uz doto brīdi a1, tas ir 100. Izmēģināju 3 variantus (pie funkcijas ir minēti), bet bez rezultātiem. Kaa panāk šādu rezultātu? protams, var izmantot konstrukciju: $tmp=$a->getA(); $b->setB2($tmp); Bet tas jau ir galvenajā programmā, bet kā to var panākt klases funkcijas iekšienē? Link to comment Share on other sites More sharing options...
bubu Posted July 20, 2004 Report Share Posted July 20, 2004 A klases setA metodei tu padod parametru, kas ir tā vērtība, ko uzstāda savam mainīgajam. Bet B klases setB metodei tu nekā nepadod!! Kā tad, lai php zin, kuras a klases vērtību tu gribi piešķirt b?? Mans variants: function setB($a) { $this->b2=$a->getA(); } un $a = new A(); $a->echoA(); $a->setA(100); $a->echoA(); $b = new B(); $b->echoB(); $b->setB($a); $b->echoB(); izdod ārā 100 :) Link to comment Share on other sites More sharing options...
hu_ha Posted July 20, 2004 Author Report Share Posted July 20, 2004 Paldies. Tagad, kad skatos uz kodu, tad liekas diezgan loģiski. Tik diez kāpēc pašam neināca galvā? Jāmēģina visu novelt uz garo darba dienu :) Link to comment Share on other sites More sharing options...
Recommended Posts