Как внедрить php-код из базы данных в php-скрипт? - PullRequest
3 голосов
/ 14 июня 2010

Я хочу сохранить php-код в своей базе данных, а затем использовать его в моем скрипте.

class A {
    public function getName() {
        return "lux";
    }
}
// instantiates a new A
$a = new A();

Внутри моей базы данных есть данные типа

"hello {$a->getName()}, how are you ?"

В моем php-коде язагрузить данные в переменную $ string

$string = load_data_from_db();
echo $string; // echoes hello {$a->getName()}, how are you ?

Так что теперь $ string содержит «hello {$ a-> getName ()}, как вы?»

{$ a->getName ()} все еще не интерпретируется

Вопрос: я не могу найти, как написать остальную часть кода, чтобы {$ a-> getName ()} интерпретировался "в привет люкс, каквы".Может кто-нибудь помочь?

$new_string = ??????
echo $new_string; //echoes hello lux, how are you ?

Есть ли решение с помощью eval ()?(пожалуйста, не спорьте о зле Eval;)) Или любое другое решение?

Ответы [ 4 ]

3 голосов
/ 14 июня 2010

Похоже, вы пытаетесь сделать что-то вроде многоязычных строк.

Существует один изящный подход, использующий sprintf

Внутри БД вы положили

"hello %s, how are you ?"

и в своем php-коде вы делаете

$string = load_data_from_db();
echo sprintf($string,$a->getName()); // replaces %s with the function value.

изменяющаяся часть ($ a-> getName ()) также должна поступать из базы данных, но с отдельным запросом (возможно, в классе A)

3 голосов
/ 14 июня 2010

взгляните на eval () - это то, что вы ищете (но я согласен с Филлом, это звучит как плохая практика)

РЕДАКТИРОВАТЬ: только что видел, что вы знаете Eval - так почему бы вам не сделать это:

eval('$string = "'.load_data_from_db().'";');

(не проверял это, но я почти уверен, что это работает)

0 голосов
/ 14 июня 2010

База данных используется для хранения данных, а не кода. Вы должны сделать свой код динамическим для чтения данных из базы данных / пользовательского ввода, но хранить код в базе данных не рекомендуется.

Почему бы не сохранить значение "люкс" в таблице базы данных.

Попробуйте это так:

class A {
    private $name;

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }
}
// Query DB
// Don't know your query so just using what you have
$passed_name = load_data_from_db(); // This would return "lux"

// instantiates a new A
$a = new A();
$a->setName($passed_name);
echo "hello ".$a->getName().", how are you ?<br />\n";
0 голосов
/ 14 июня 2010

вы можете сохранить его во временный файл, например temp.file, а затем сделать include('temp.file');

...