Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Dynamischer Zugriff auf statische Methoden?
Antwort
 
Themen-Optionen
Alt 21.04.2006, 16:56   Nach oben    #1
El Barto
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard Dynamischer Zugriff auf statische Methoden?

Ich bin gerade mit folgendem Problem beschäftigt:

PHP-Code:
require_once 'MyClass.php'

$className "MyClass";
$value = & $className::getValue(); 
Leider ist diese Schreibweise wohl nicht zulässig.
Gibt es eine andere Möglichkeit statisch auf eine Methode zuzugreifen, von der ich den Klassennamen erst während der Laufzeit erfahre?
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.04.2006, 17:18   Nach oben    #2
El Barto
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

ich hab eine Möglichkeit gefunden:

PHP-Code:
require_once 'MyClass.php'

$className "MyClass";
$value = & call_user_func(array($className"getValue")); 
Aber wenns ne elegantere Lösung gibt, lasst es mich wissen!
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.04.2006, 21:07   Nach oben    #3
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

PHP-Code:
$className 'MyClass';
{
$className}::myMethod(); 
Keine Ahnung ob das geht, sollte aber.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 09:21   Nach oben    #4
El Barto
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

Nein das geht nicht.
Wieso sollte da auch eine geschweifte Klammer rein. Was macht das für einen Sinn?
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 09:51   Nach oben    #5
El Barto
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

Es gibt noch eine Möglichkeit:

PHP-Code:
$className "MyClass";
$string $className."::myMethod();";
eval(
$string); 
das ganze ist zwar auch nicht elegant, aber es geht wohl nicht anders
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 10:11   Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

du solltest lieber call_user_method verwenden.
Weil sofern du einen fehler beim filtern des klassennamen machst, könnte man beliebigen code ausführen und das is net gut.

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 12:32   Nach oben    #7
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Wieso sollte da auch eine geschweifte Klammer rein. Was macht das für einen Sinn?
Weil z.B. $$a die Kurzfassung von ${$a} ist. Wenn irgendwo eine Variable in geschweiften Klammern steht, wird die gesmte Klammer durch den Inhalt der Variable ersetzt.

Da $className:oSth() auch als falsch geschriebener Objektzugriff gewertet werden könnte, habe ich gedacht, dass die Klammermethode eventuell hilft.

Ist ja nicht so, dass ich das aus Jux und Dollerei vorschlage
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 14:27   Nach oben    #8
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Wenn irgendwo eine Variable in geschweiften Klammern steht, wird die gesmte Klammer durch den Inhalt der Variable ersetzt.
Wenn irgendwo eine Variable steht wird der die gesamte Variable durch den Wert der Variable ersetzt (Zuweisung ausgenommen). Macht imho wenig Sinn.

Grundsätzlich geht es darum, dass du konflikte mit Anführungszeichen vermeitest.

Beispiel:
PHP-Code:
<?php
$arr 
= array("asdf" => "jklö");

echo 
"Ein String und jetzt der Wert $arr["asdf"]"// parse error
echo "Ein String und jetzt der Wert {$arr["asdf"]}"// ok
?>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 16:07   Nach oben    #9
VolkerK
Benutzer
 
Registriert seit: 17.08.2005
Beiträge: 87
Standard

Nicht ausschließlich. Sie werden auch bei variablen Variablen verwendet
PHP-Code:
<?php
$a 
'ab';
$y 'yz';

$abyz 'text';
echo ${
$a.$y};
?>
Oder wenn Zeichen in einem Bezeichner verwendet werden, die ohne besondere Markierung nicht erlaubt sind.
PHP-Code:
echo $simplexml->{'time-in-force'}; 

call_user_func() ist sicherlich ausreichend. Eine andere Möglichkeit bietet php 5 mit Reflektion an.
PHP-Code:
<?php
class Foo
{
    static public function 
bar()
    {
        echo 
'foobar';        
    }
}


$ref = new ReflectionClass('Foo');
$ref->getMethod('bar')->invoke(null);
?>
VolkerK ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.04.2006, 17:37   Nach oben    #10
El Barto
Benutzer
 
Registriert seit: 14.11.2005
Beiträge: 52
Standard

@Fat Tony:

call_user_method ist laut php.net aber deprecated und es wird vorgeschlagen stattdessen call_user_func zu verwenden.
El Barto ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zugriff auf Konfiguration im verschachtelten Array Ben PHP-Programmierung 5 02.02.2007 12:47
[VBScript] Probleme mit Zugriff auf Argument der Kommandozeile WarrenFaith Sonstige Programmiersprachen 2 13.02.2006 13:57
dynamischer Zugriff auf statische Eigenschaft einer Klasse Ben PHP-Programmierung 10 15.11.2005 15:53
Zugriff auf Graphics Objekte eines Applets lokl Desktop-Applikationen und Grafik 0 11.08.2005 10:28
Zugriff auf Dateien Im Netz CyberHoney Desktop-Applikationen und Grafik 7 22.09.2004 16:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:04 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44