php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.03.2009, 09:58  
Neuer Benutzer
 
Registriert seit: 26.03.2009
Beiträge: 4
tereano befindet sich auf einem aufstrebenden Ast
Standard ReflectionClass export schlägt fehl bei Zugriff auf Klassenkonstante

Hi,
nutze gerade für reverse engineering Zwecke die Reflection API.
Folgendes Problem:

PHP-Code:
class Foo {
    const 
T_FOO 1;
        
    public function 
getFoo($value self::T_FOO){
        return 
$value;
    }
}

Reflection::export(new ReflectionClass('Foo')); 
Fehler:
PHP-Code:
/* Fatal error: Undefined class constant 'self::T_FOO' */ 
PHP-Code:
class Foo {
    const 
T_FOO 1;
        
    public function 
getFoo($value Foo::T_FOO){
        return 
$value;
    }
}

Reflection::export(new ReflectionClass('Foo')); 
Korrekte Ausgabe:
PHP-Code:
/* Class [  class Foo ] { @@ [path] 
14-20 - Constants [1] { Constant [ integer T_FOO ] { 1 } } 
- Static properties [0] { } 
- Static methods [0] { } 
- Properties [0] { } - Methods [1] 
{ Method [  public method getFoo ] 
{ @@ [path] 17 - 19 - Parameters [1] { Parameter #0 [  $value = 1 ] } } } }
*/ 

Sprich: wird in den Methoden-Parametern per self auf Klassenkonstante zugegriffen, schägt der Reflection export fehl, unter Verwendung des Klassennamens hingegen nicht.

Wurde auch schonmal im tracker angemerkt PHP Bugs: #38039: ReflectionCLass can't find "self::" constants , aber nicht als bug akzeptiert.

Daher prinzipiell: Die Verwendung von self im Funktionsaufruf mag unschön sein, ist aber nicht unzulässig, und wenn ich die Reflection API nutzen will für reverse engineering, dann sollter der export imo damit auch umgehen können, habe wenig Muße alle self in den Methoden-Parametern durch die Klassennamen zu ersetzen (zumal es sich um eine 3rd party Applikation handelt), also:

Ist das jemandem schonmal begegnet und/oder hat eine Idee/Kommentar, weitere Infos dazu.
Ist es eher ein "Missing feature"?

Dank & Grüße
tereano ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.03.2009, 11:57  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Mit php 5.2.9 unter Windows funktioniert es.
Code:
Class [ <user> class Foo ] {
  @@ D:\temp\test.php 2-8

  - Constants [1] {
    Constant [ integer T_FOO ] { 1 }
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [1] {
    Method [ <user> public method getFoo ] {
      @@ D:\temp\test.php 5 - 7

      - Parameters [1] {
        Parameter #0 [ <optional> $value = 1 ]
      }
    }
  }
}
David ist offline   Mit Zitat antworten
Alt 30.03.2009, 12:34  
Neuer Benutzer
 
Registriert seit: 26.03.2009
Beiträge: 4
tereano befindet sich auf einem aufstrebenden Ast
Standard

Mit 5.2.4-2ubuntu5.5 nicht (sorry, die Version hatte ich vergessen).
tereano ist offline   Mit Zitat antworten
Alt 30.03.2009, 12:42  
Neuer Benutzer
 
Registriert seit: 26.03.2009
Beiträge: 4
tereano befindet sich auf einem aufstrebenden Ast
Standard

und in 5.3.0RC1 gehts auch...schöner scheiss.
ok. (soviel zum Thema "this is not a bug", der "was auch immer" hat sich dann wohl magisch selbst bereinigt.)

Geändert von tereano (30.03.2009 um 13:00 Uhr).
tereano ist offline   Mit Zitat antworten
Alt 30.03.2009, 13:16  
Neuer Benutzer
 
Registriert seit: 26.03.2009
Beiträge: 4
tereano befindet sich auf einem aufstrebenden Ast
Standard

war doch ein bug PHP Bugs: #38465: ReflectionParameter fails if default value is an access to self:: und wurde behoben.
wieso das in 5.2.4-2ubuntu5.5 nicht funktioniert ist mir ein Rätsel, der Changelog gibt das Fixed aus für 5.2.0...strange
tereano ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Gier unterdrücken schlägt fehl:( WAY_KOW PHP Tipps 2009 5 20.02.2009 17:07
.htaccess login schlägt fehl sternschnuppe99 Server, Hosting und Workstations 6 07.02.2008 13:37
login schlägt immer fehl sternschnuppe99 Server, Hosting und Workstations 3 07.02.2008 13:28
Ltrim schlägt fehl HILFE! karlegonwalter PHP Tipps 2008 1 14.12.2007 21:11
Variablenzuweisung PHP -> Javascript schlägt fehl Anotherone HTML, Usability und Barrierefreiheit 2 01.10.2007 15:14
login mit IE schlägt fehl matthros PHP Tipps 2006 3 17.05.2006 15:22
new DOMDocument() schlägt fehl PHP Tipps 2006 0 04.02.2006 15:21
[Erledigt] MySQL 4 installieren bei Linux schlägt fehl! Datenbanken 12 27.06.2005 17:15
Dateien löschen schlägt fehl - open_basedir restriction... c-f-g PHP Tipps 2005 7 28.04.2005 11:01
cookies setzen schlägt fehl (counter einrichten) PHP Tipps 2005 16 06.01.2005 00:33
Variablen übergeben an FPDF schlägt fehl Soese PHP Tipps 2005 32 02.01.2005 20:45
include schlägt fehl Fraylman PHP Tipps 2004-2 15 08.12.2004 11:16
Login schlägt nach Domainumzug fehl PHP Tipps 2004-2 5 02.12.2004 01:48
Cookie schlägt fehl Paulo PHP Tipps 2004-2 6 25.11.2004 15:34
Bilder generieren schlägt fehl PHP Tipps 2004 5 13.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php reflection class const, php reflection export, reflectionclass::export, reflectionclass export, php reflectionclass export, reflection::export, php reflectionclass self, php 5.2 reflection, php reflectionclass windows, klassenkonstante php, reflectionclass, reflectionclass php, reflection class php, reflection php 5.2, php reflection class, php reflection, php windows reflectioncalss, what is reflectionclass::export, reflectionclass php path, new this javascript reflection parameter deutsch

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum