EdgarsK Posted February 1, 2010 Report Share Posted February 1, 2010 (edited) Sveiki <? class A { public $url; } class B extends A { function __construct(){ var_dump($this); } } ?> Itkā šādi viss būtu ok, būtu object B {.. $url... } bet tagad man ir sekojosha problema, ka lai piesaistu citas klases ta, lai extends darbojas. <? class A { public $url; } class B { public $urlHeader=123; } class C extends A { function __construct() { var_dump($this); } } $base = new A; $base->url = new B; $c = new C; ?> pretim sanjemu tikai $url, urlHeader neparadas, ko darit ? Edited February 1, 2010 by EdgarsA Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted February 1, 2010 Report Share Posted February 1, 2010 class A { public $url_a; } class B extends A { public $url_b; } class C extends B { public $url_c; } $c = new C(); $c->url_c; $c->url_b; $c->url_a; // taatad ir pieejams viss class A {public $url_a; } class B { public $url_b; } class C extends A { public $url_c; } $c = new C(); $c->url_c = new B(); $c->url_c; $c->url_c->url_b; $c->url_a; // pa tiesho ir pieejams tikai url_a un url_c. url_b ir pieejams caur url_c, jo tas ir klases B ojekts. Quote Link to comment Share on other sites More sharing options...
codez Posted February 1, 2010 Report Share Posted February 1, 2010 $base = new A; // šeit tu izveido A instanci $base $base->url = new B; // šeit tu $base->url piešķir jaunu izveidotu B instanci $c = new C; //šeit tu izveido C instanci $c. Tā ir jauna instance tās $url parametram nav piešķirta vērtība. Quote Link to comment Share on other sites More sharing options...
EdgarsK Posted February 2, 2010 Author Report Share Posted February 2, 2010 Bet man ir sekojosa situacija index.php <? include 'database.php'; $base = class Base { } $base->db = new Database; include $page; ?> database.php <? class Database { ... } ?> $page <? class SomePage extends Base { } ?> sanak ka beigas print_r uz Base izprinte ka ir ->db ta ka vaig, bet ja taisa print_r no SomePage tad ir tuksh.. Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted February 2, 2010 Report Share Posted February 2, 2010 (edited) Atceries, ka tu extend'o nevis klases objektu, bet gan klases blueprint'u. class A {public $var_a = 'a'; } class B { public $var_b = 'b'; } $b = new B(); $b->var_b = new A(); echo $b->var_b->var_a; //izvadiis a class C extends B { public $var_c = 'c'; } $c = new C(); echo $c->var_b->var_a; //buus FAIL, jo $var_b nav objekts, bet gan strings ar veertiibu b. Edited February 2, 2010 by rATRIJS Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted February 2, 2010 Report Share Posted February 2, 2010 Protams, ka tukšs. Tas, ka tu instances mainīgajam piešķir kaut kādu vērtību nenozīmē, ka tas būs pieejams klasē un to mantos vēl kāda cita. Tas, ko tu gribi, varētu būt panākams ar statiskām metodēm/mainīgajiem. Kaut kā tā: class Base{ public static $someVar; } class SomePage extends Base{ public static function getParentSomeVar(){ return parent::$someVar; } } Base::$someVar='test'; echo SomePage::getParentSomeVar(); Quote Link to comment Share on other sites More sharing options...
codez Posted February 2, 2010 Report Share Posted February 2, 2010 To, ko tu gribi panākt, var ar Singleton paternu. Bet klasei page extendod db, man nesšķiet īpaši loģiska doma. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 2, 2010 Report Share Posted February 2, 2010 (edited) es nedomāju, ka šeit ir runa par loģiskumu vai vnkāršību. daudziem oop ir krutuma pazīme vai vismaz forša rotaļlieta ;) function vdump($v) {echo '<pre>'; var_dump($v); echo '</pre>';} // var_dump() + formatting class A { public $url; } class B extends A { public $urlHeader = 123; } class C extends A { } vdump(new A); // ir url vdump(new B); // ir gan urlHeader, gan url vdump(new C); // tas pats, kas new A gadījumā // ja vajag jaunu klasi, kurā būtu gan urlHeader, gan url, tad vajag extendod B, nevis A class D extends B { } vdump(new D); // tas pats, kas new B gadījumā iespējams, ka lai pareizi izveidotu/inicializētu visu šo klašu piramīdu, varētu noderēt parent::__construct() vsp piekrītu xPtv45z, ka varētu izmantot statiskās metodes/mainīgos. taču tiklīdz oop vidē parādās vārdiņš "statisks", tas pēc būtības nozīmē veco labo procedurālo programmēšanu tikai ar oop līdzekļiem ;) te nu mēs esam... Edited February 2, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.