2012-04-04 7 views
0

ich mich gefragt, ob es möglich wäre, dies zu tun:PHP Nehmen Sie eine Variable in einer If-Anweisung wörtlich

$var = '$something == $somethingelse'; 

if ($var) { // Say hello } 

und haben, bedeutet es das gleiche wie folgt aus:

if ($something == $somethingelse) { // Say hello } 

Ich weiß, das wird im Moment nicht funktionieren, weil überprüft, ob $var gesetzt ist oder nicht. Aber was ich frage ist: Gibt es eine Methode, dies zu erlauben? Würde mich über eine Antwort freuen.

EDIT: Grundsätzlich fühle ich, ich sollte erklären, warum ich das mache. Ich möchte Benutzer in der Lage zu steuern, wenn sie eine Benachrichtigung erhalten, basierend auf einige Daten, die einer ihrer "Kanäle" gespeichert hat.

Zum Beispiel kann ein Benutzer möchte nur eine Benachrichtigung erhalten, wenn ihre gesammelten Daten größer als 60 ist also würde ich sie zwei Felder zur Auswahl:

Erste Feldeingabe ihrer Nummer (int oder float)

Zweites Feld choises (entspricht, <, >, = <, = >)

Das letzte, was in dieser Aussage, wenn ihre Daten von ihrem "Kanal" gesammelt würde.

Ich möchte dann in der Lage sein, ihre Wahl in einer Datenbank irgendwie zu speichern, und dann später auf ihre Entscheidungen zu reagieren.

+0

'eval' Funktion in PHP tut dies: http://php.net/manual/en/function.eval.php – anubhava

+0

@anubhava: sei vorsichtig mit' eval'. –

+2

Dies wird oft als eine sehr schlechte Praxis angesehen, und es gibt normalerweise eine andere Möglichkeit, was Sie brauchen, von 'eval()' zu tun. –

Antwort

-1

Sie sagen, dass diese Zeichenfolge von Ihnen an anderer Stelle generiert wird. Ich schlage vor, statt einer Zeichenkette ein Array zu generieren.

Gefällt mir: array('something','==','somethingelse').

Wenn Sie dies jetzt verarbeiten möchten, können Sie die Variablen durch ihre Werte ersetzen und dann den Operator überprüfen und die korrekte Operation ausführen.

Etwas wie folgt aus:

$x = array('something','==','somethingelse'); 
list($valA, $operation, $valB) = $x; 

// Replace values 
$valA = $$valA; 
$valB = $$valB; 

// Run operation 
$result = false; 
switch($operation){ 
    case '==': 
     $result = $valA == $valB; 
     break; 
    default: 
     break; 
} 
if($result) echo ":-)"; 

DEMO: http://codepad.org/vaELABEm

Sie können auch diese andere Dinge zu tun verwenden, um mehr case s zum switch hinzufügen.

+0

Warum ein Downvote? Ich denke, das ist eine viel bessere Idee als 'eval'. –

4

The eval() Sprachkonstrukt ist sehr gefährlich, weil es die Ausführung von beliebigem PHP-Code erlaubt. Seine Verwendung wird daher abgeraten. Wenn Sie sorgfältig überprüft haben, dass es keine andere Möglichkeit als die Verwendung dieses Konstrukts gibt, achten Sie besonders darauf, dass keine vom Benutzer bereitgestellten Daten in das System eingegeben werden, ohne es zuvor ordnungsgemäß zu validieren.

+0

Danke dafür - ich würde diese Zeichenfolgen woanders in meiner Webanwendung erzeugen, und deshalb würde kein Benutzer jemals in der Lage sein, diese selbst zu bearbeiten. – Alfo

+1

@Alfo: Wenn Sie diese Zeichenfolge selbst generieren, würde ich vorschlagen, diesen Code zu ändern. Generieren Sie statt einer einzelnen Zeichenfolge say, ein Array. Mit den Werten und der Operation, wie zum Beispiel 'array ('$ something', '==', '$ somethingselse')'. Dann überprüfe einfach, was die Operation ist und führe das korrekte 'if' aus. –

+0

Das ist interessant. Wie würde ich dann diese Informationen verwenden, um dynamische "if" -Anweisungen zu generieren? – Alfo

0

Warum nicht einfach if ($something == $somethingelse) { // Say hello } verwenden? Es ist nicht viel mehr Code.

+0

Weil '$ var' aus einer Datenbank gelesen würde. – Alfo

+2

@Alfo: Das Speichern von PHP-Code in einer Datenbank ist in der Regel verpönt. –

+0

@Rocket auch wenn es nur '$ a => $ b' ist? – Alfo

0

Wenn Sie zu dieser Frage kommen, dann stimmt etwas mit Ihrem Design nicht.

Das Mischen des Codes mit Daten (was Sie eigentlich tun) ist eines der schlimmsten Dinge, die ein Programmierer tun kann. Es macht Ihren Code nicht erreichbar und unsicher.

Sie müssen Ihre Anwendung neu gestalten, damit Ihr Code fest und nicht variabel ist.

Verwandte Themen