2016-06-03 5 views
1

In meinem Demo-Projekt möchte ich auf statische Variable einer bestimmten Klasse zugreifen, aber diese Variablennamen werden dynamisch übergeben. Ich versuche Funktion Variable zu verwenden, wie unten angegeben:Fehler in Zugriffsfunktionsvariable als statische Variable

public function filterBy($params) 
    { 
     foreach ($params as $key=>$value) { 
      $filter_field_name = strtoupper($key); 
      $this->criteria->add(ProductPeer::$filter_field_name, $value, Criteria::EQUAL); 
     } 
     return $this; 
    } 

Es mir

Fatal error: Access to undeclared static property: ProductPeer::$filter_field_name in /home/sfprojects/shopme/lib/product/ProductDb.php on line 47

Obwohl gibt Fehler, wenn ich ProductPeer::STATUS statt ProductPeer::$filter_field_name verwenden dann funktioniert es.

Was ist hier falsch?

Antwort

1

Es gibt eine Funktion constant() die dies tun können:

constant('ProductPeer::' . $filter_field_name); 
+0

Yup, funktioniert perfekt! Vielen Dank. obwohl ich Grund dahinter nicht kenne, wenn Sie Grund hinter dem Zugriff über konstante Funktion sagen können, dann wäre es hilfreich – Rupal

+0

Ich nehme an, dass das '$' greift nur auf Eigenschaften der Klasse, während Konstanten sind ein separates Sprachkonstrukt, das anders funktioniert . –

0

$ this-> kriterien> add (ProductPeer :: $$ filter_field_name, $ value, Kriterien :: EQUAL);

Verwenden Sie ein doppeltes Dollarzeichen als Referenz für eine andere Variable. Wie $$ filter_field_name