Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-14 12:47:36 - Jonas Sjöblom, i forum php, Tråden har 10 Kommentarer och lästs av 1669 personer

Sitter med ett till synes enkelt problems om håller på att ge mig en jävla huvudvärk.

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


Svara

Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-14 13:32:32 - Anders Sundqvist

Och det är bara inte så enkelt att det saknas ett $ för variabelnamnet DB_TABLE?

(är usel på att se fel genom att bara se koden så jag skjuter från höften.. :-)


Svara

Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-14 15:39:41 - Jonas Sjöblom

Ursäkta, det var ett fel från min sida :) Jag har ett $ i min kod, glömde bara att skriva det här.

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 nu


Svara

Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-16 16:10:52 - Per Persson

Varför inte

	public function getDbName()
	{
		return self::$DB_TABLE;
	}

?


Svara

Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-19 08:09:13 - Jonas Sjöblom

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?


Svara

Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-19 15:34:21 - Per Persson

Det funkar för mig om variabeln är protected eller public.


Svara

Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-20 09:14:11 - Jonas Sjöblom

Märkligt, vilken php-version kör du?


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>


Svara

Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-20 12:12:22 - Oskar Johansson

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


Svara

Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-21 11:20:31 - Jonas Sjöblom

Jag har tyvärr testat även det utan resultat.


Svara

Sv: Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-21 12:04:44 - Per Persson

<b>Märkligt, vilken php-version kör du?</b>

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


Svara

Sv:Accessa en statisk variabel i klass med dynamiskt klassnamn.

Postades av 2009-10-22 09:10:27 - Jonas Sjöblom

Tack för svart, jag fick det årminstone att fungera någorlunda bra :) Kanske skriver om det vid eventuell uppgradering av php.


Svara

Nyligen

  • 15:35 Chicken road crash game
  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 888
27 965
271 777
6 859
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies