xOneDirectionx (04.08.2014)
Thema: [PHP] Probleme mit eval
-
03.08.2014, 02:47 #1U-Labs Routinier
- Registriert seit
- 18.03.2013
- Beiträge
- 481
Thanked 264 Times in 168 Posts
[PHP] Probleme mit eval
Hey,
ich habe da ein paar Probleme mit der eval()-Funktion, die ich nicht nachvollziehen kann.
Folgendes funktioniert:
Soweit so gut. Jetzt dachte ich, ich kann so auch ganz einfach ein Array mit verwenden. Habe also folgendes gemacht:PHP-Code:<?php
$string = "fucking";
$shit = "shit";
$str = 'This is a $string $shit function!';
echo $str. "<br>";
eval("\$str = \"$str\";");
echo $str;
?>
Und schon gehts nicht mehr. Kann mir jemand sagen, wie ich das am besten machen kann? Meine Funktion "getLanguageKeys" gibt mir ein Array mit allen Sprachfeldern aus der Datenbank zurück. Und ehrlich gesagt hab ich keine Lust, für jeden String einen str_replace machen zu müssen.PHP-Code:<?php
$lang = getLanguageKeys();
$str = "This is a $lang['key1'] $lang['key2'] function!";
echo $str. "<br>";
eval("\$str = \"$str\";");
echo $str;
function getLanguageKeys() {
$lang['key1'] = 'fucking';
$lang['key2'] = 'shit';
return $lang;
}
?>
Kann mir hier jemand helfen?
-
03.08.2014, 11:17 #2Mitglied
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 Posts
AW: [PHP] Probleme mit eval
Never ever do that
Bitte so schreiben:PHP-Code:$str = "This is a $lang['key1'] $lang['key2'] function!";
Erstens sauberer, zweitens schneller.PHP-Code:$str = 'This is a '.$lang['key1'].' '.$lang['key2'].' function!';
Dann empfehle ich, nicht eval zu nutzen. Würde die Sachen cachen in einer Datei und dann includen. Eval sollte wenn möglich, nie genutzt werden.Geändert von BeTwo (03.08.2014 um 11:18 Uhr)
-
03.08.2014, 15:01 #3U-Labs Routinier
- Registriert seit
- 18.03.2013
- Beiträge
- 481
Thanked 264 Times in 168 Posts
AW: [PHP] Probleme mit eval
Hintergrund, warum ich eval() benutzen muss:
Ich habe eine Template-Datei (design.tpl), damit ich Änderungen am Design immer nur an einer Stelle durchführen muss. Diese binde ich in der PHP-Datei mittelsein und gebe sie so aus. Zuvor habe ich einzelne Platzhalter darin gehabt, die ich noch mittels str_replace() manuell ersetzt habe. Allerdings würde der Umbau auf eine multilinguale Seite den Rahmen sprengen, ich müsste etwa 25 Stellen replacen. Und das wird extrem unübersichtlich.PHP-Code:echo implode('', file('design.tpl'));
Das mit dem String oben war nur ein Beispiel. Ich habe es mit der Datei jetzt hinbekommen.
design.tpl
HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Test</title> </head> <body> This is a {$lang['key1']} {$lang['key2']} function! </body> </html>
test.php
PHP-Code:<?php
$lang = getLanguageKeys();
$str = implode('', file('test2.tpl'));
eval("\$str = \"$str\";");
echo $str;
function getLanguageKeys() {
$lang['key1'] = 'fucking';
$lang['key2'] = 'shit';
return $lang;
}
?>
Jetzt kann ich meine Seite darauf anpassen. Danke dennoch für deine Antwort BeTwo.Geändert von xOneDirectionx (03.08.2014 um 15:02 Uhr)
-
03.08.2014, 16:46 #4Projektleitung
- Registriert seit
- 15.11.2011
- Beiträge
- 8.474
- Blog Entries
- 5
Thanked 9.519 Times in 3.334 Posts
AW: [PHP] Probleme mit eval
Warum benutzt du keine Template-Engine wie z.B. Smarty?
Template
AusgabeHTML-Code:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{$phrase.pageTitle}</title> </head> <body> {$phrase.someText} </body> </html>
Wobei ich dafür ein kleines Smarty-Plugin nutzen würde (musst du ggf. anpassen):PHP-Code:$smarty = new Smarty;
$smarty->assign('phrase', loadLanguage());
$smarty->display('test.tpl');
PHP-Code:class TemplateHelper {
/**
* Fügt über {phrase name="PHRASENNAME"} eine Phrase ins Template ein (optional: weitere Parameter zur Ersetzung, Beispiel: {phrase name="TestPhrase" xy="123"} | Phrase: 'Testwert: {xy}' => 'Testwert: 123'
* @param array $params Parameter, mit denen die Funktion aufgerufen werden
* @param object $smarty Smarty-Instanz
* @return Phrase mit ersetzten Platzhaltern, sofern vorhanden
*/
public static function phrase($params, $smarty) {
$phraseValue = Phrase::get($params['name']);
if(strlen($phraseValue) == 0)
return '';
unset($params['name']);
// Optionale Parameter setzen
foreach($params as $key => &$value) {
if($value == null)
$value = '';
$phraseValue = str_replace('{' . $key . '}', $value, $phraseValue);
}
return $phraseValue;
}
}
Du sparst dir Arbeit und bist flexibel. Über die interne Verarbeitung der Variablen musst du dir keine Gedanken machen, sondern sie lediglich im jeweiligen Template registrieren.PHP-Code:$smarty->registerPlugin('function', 'phrase', array('TemplateHelper', 'phrase'));
-
The Following User Says Thank You to DMW007 For This Useful Post:
Ähnliche Themen
-
Bot Probleme
Von koppaz1337 im Forum Allgemeiner Bot-BereichAntworten: 0Letzter Beitrag: 08.07.2013, 16:48 -
DHL Probleme? (Nicht zugestellte Sendungen)
Von Bartek im Forum RealLifeAntworten: 11Letzter Beitrag: 03.01.2013, 20:52 -
VB.Net VB.net - 2 Probleme
Von Gangstersheep im Forum .NetAntworten: 5Letzter Beitrag: 25.07.2012, 17:20 -
2 Probleme mit dem PC!
Von Microsoft im Forum HardwareAntworten: 24Letzter Beitrag: 05.07.2012, 23:17 -
Cod: Mw3 Probleme
Von Salvos im Forum Sonstige GamesAntworten: 0Letzter Beitrag: 20.11.2011, 16:37
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
