Jump to content
php.lv forumi

Problēmas ar extends class


EdgarsK

Recommended Posts

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 by EdgarsA
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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..

Link to comment
Share on other sites

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 by rATRIJS
Link to comment
Share on other sites

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();

Link to comment
Share on other sites

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 by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...