Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > $this->$key по человечески


Автор: Digit 25.8.2009, 18:17
Чтобы было понятнее сразу код
Код

$props = array("name"=>"text", "mag"=>"int");
...
foreach ($this->props as $key => $value){
            $text .= "public \$$key = '$this->$key';";
        }
...
file_put_contents($this->savePath . $this->iName . ".php", $text);


ошибка происходит здесь: '$this->$key'
текст ошибки: Catchable fatal error: Object of class ХХХ could not be converted to string

Задача: сгененерировать PHP код, который будет записан в другой PHP  файл, при этом имеется массив $props где хранится имя и тип переменной, сами же переменные с этими именами сужествуют, нужно вместо  '$this->$key' подпихнуть значение переменной, имя которой находится в переменной $key

Надеюсь хоть что то из написанного понятно...

Автор: NewDima 25.8.2009, 19:10
С объяснением явные проблемы. По тому, что я понял из вышесказанного, тогда что-то такое:
Код

<?php
class configSaver {
    protected $_saveName = '';

    protected $_options = array('_a'=>'', '_b'=>'');

    protected $_a;
    protected $_b;

    public function setSaveName($name) {
        if (is_string($name)) $this->_saveName = $name;
    }

    public function save($name = '') {
        if ($name != '') $this->setSaveName($name);
        if (!is_resource($file = @fopen($this->_saveName, 'wt'))) throw new exception('Invalid file path');
        fwrite($file, "class Config {\n");
        foreach ($this->_options as $name => $value) {
            fwrite($file, "    public static $".$name." = ".var_export($this->$name, true).";\n");
        }
        fwrite($file, "}");
        fclose($file);
    }

    public function setA($value) {
        $this->_a = $value;
    }

    public function setB($value) {
        $this->_b = $value;
    }
}

$con = new configSaver();
$con->setA(1);
$con->setB('var');
$con->save('./config.php');
?>

Как я понял, тебе требуется сохранение состояния класса?
В таком случае рули в сторону __set_state

Автор: IZ@TOP 25.8.2009, 19:57
Digit, http://php.net/var_export

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)