Sitter med ett till synes enkelt problems om håller på att ge mig en jävla huvudvärk. Och det är bara inte så enkelt att det saknas ett $ för variabelnamnet DB_TABLE? Ursäkta, det var ett fel från min sida :) Jag har ett $ i min kod, glömde bara att skriva det här. Varför inte Minns inte detaljerna men det fungerade inte av någon anledning. Kanske för att metoden ligger i parent-klassen men variabelns värde ges i child-klassen? Det funkar för mig om variabeln är protected eller public. Märkligt, vilken php-version kör du? Rent teoretiskt (jag har dock inte knackat så mycket php än, håller på att lära mig just php nu) så känns det som att du borde deklarera din variabel i din abstrakta klass för att din funktion getVar ska känna till den, sedan att du ändrar värde på den i din ärvda klass..? Jag har tyvärr testat även det utan resultat. <b>Märkligt, vilken php-version kör du?</b> Tack för svart, jag fick det årminstone att fungera någorlunda bra :) Kanske skriver om det vid eventuell uppgradering av php.Accessa en statisk variabel i klass med dynamiskt klassnamn.
Jag har en klass med en publik, statisk variabel (variabeln används i parent-klassen så kan inte använda konstanter).
Nu vill jag komma åt den här från en annan klass. Jag har klassnamnet som en sträng och kan alltså instantiera klassen med:
<code>
$classname = "objekt"; // Den här raden är bara som exempel.. egentligen har jag i det här läget ingen koll på vilken sträng som skickas med.
$object = new $classname();
</code>
Men hur får jag ut variabeln?
INGEN av dessa fungerar:
<code>
print $object->DB_TABLE;
print $object::DB_TABLE;
print $object::$DB_TABLE;
$classname->DB_TABLE;
$classname::DB_TABLE;
$classname::$DB_TABLE; // Fungerar enligt dokumentationen i PHP 3.3.0+... uppgradering är tyvärr inget alternativ.
</code>
Klassen i sin enkelhet ser ut såhär:
<code>
class objekt extends blahblah
{
public static string DB_TABLE = "min_objekt_tabell";
}
</code>
PHP version: 5.2.8Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.
(är usel på att se fel genom att bara se koden så jag skjuter från höften.. :-)Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.
Jag löste det genom att skapa en metod i stil med: (minns inte exakta syntaxen, har koden på jobbet och är hemma nu)
<code>
public function getDbName()
{
$vars = get_class_vars( get_class($this) );
return $vars['DB_TABLE'];
}
</code>
Inte den snygagste lösningen men verkar inte finna snågra alternativ efter ett par timmars googlande.
UPDATE: Rätt kod nuSv: Accessa en statisk variabel i klass med dynamiskt klassnamn.
public function getDbName()
{
return self::$DB_TABLE;
}
?
Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.
Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.
Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.
EDIT: Exempel så du ser vad jag försöker med.
<code>
class a extends b
{
public static $var = 'hej';
}
abstract class b
{
public function getVar()
{
return self::$var;
}
}
$a = new a();
print $a->getVar();
</code>Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.
Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.
Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.
Ber om ursäkt. Tänkte fel. Det var inte en statisk variabel jag hade.
I PHP 5.3.0 finns sen statisk bindning. Då kan man skriva static::$var i stället för self::$var och få variabeln i klassen där anropet sker i stället för klassen där koden ligger.
http://www.php.net/manual/en/language.oop5.late-static-bindings.phpSv:Accessa en statisk variabel i klass med dynamiskt klassnamn.