使用变量访问PHP obj

时间:2010-11-22 01:46:41

标签: php object

更新此问题...我正在开发一个小型CMS。数据以XML格式保存。我正在尝试访问正确的图像字段以更新文件名并删除当前图像。

脚本根据调用的位置获取变量。在这种情况下,$ page =“homes”,$ elem =“home”和$ field = 0.以下是在图片上传时调用的。

if (!empty($_FILES)) {
    $field = $_POST['field'];
    $tempFile = $_FILES['upload']['tmp_name'];
    $targetFile = "img/sections/".$_POST['page']."/";
    $targetFile .= basename($_FILES['upload']['name']);
    if (move_uploaded_file($tempFile,$targetFile)) {
        $file = "spice.xml";
        $load = simplexml_load_file($file);
        $old_img = $load->sections->$page->$elem[$field]['img'];
        $load->sections->$page->$elem[$field]['img'] = $targetFile;
        file_put_contents($file, $xml->saveXML());
        unlink($old_img);
    }
}

这是XML文件的结构:

<spice>
    <sections>
        <homes>
            <home img="img/sections/home/img1.jpg"/>
            <home img="img/sections/home/img2.jpg"/>
            <home img="img/sections/home/img3.jpg"/>
        </homes>    
    </sections>
</spice>

我的问题是$ old_img给了我一个“不能将字符串偏移用作数组”错误。如果我只用值替换$ elem和$ field变量,那么一切正常。

2 个答案:

答案 0 :(得分:3)

PHP将[$field]偏移量解释为变量$elem的一部分而不是整个属性$load->sections->$page->$elem,这可能是您的问题所在。在视觉上,这正是PHP所寻求的:

// The character at the 0th ($field) position of 'home' ($elem) is 'h'
'h'['img']

导致您看到的错误,因为字符串偏移是字符串,而不是数组。

试试这个。注意$elem周围的花括号。

        $old_img = $load->sections->$page->{$elem}[$field]['img'];
        $load->sections->$page->{$elem}[$field]['img'] = $targetFile;

答案 1 :(得分:3)

使用XPath的替代代码:

$load = simplexml_load_file($file);
$path=$load->xpath('//sections/'.$page.'/'.$elem);
$path[$field]['img']=$targetFile;