PHP解析错误 - 请指出编码恐怖

时间:2010-09-15 15:03:18

标签: php

Class_view.php包含类定义作为关联数组:

class View
{
    private $viewArray = array();   

    function getViewArray() {
        return $this->viewArray;
    }

    function addToViewArray($key, $value) {
        $this->view[$key] = $value;
    }
}

在Index.php中我有:

$view = new View();
$view->addToViewArray("title", "Projet JDelage");
// Much more code
include ("UI_Header.php");

导致错误的代码位于“标题”HTML标记周围的UI_Header.php中:

<?php
    echo '<?xml version="1.0" encoding="utf-8"?>'
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title><?php echo htmlspecialchars($view->getViewArray()['title']);?>
        </title>
        <link rel="stylesheet" media="screen" type="text/css"     title="StyleSheetProjet" href="StyleSheetProjet.css" />
    </head>

我正在尝试获取与此处显示的密钥'title'相关联的值。

我得到的错误是:

  

解析错误:在第7行的Header.php中解析错误

2 个答案:

答案 0 :(得分:4)

问题是$view->getViewArray()['title']。 PHP还不支持这个(it will be included in the next PHP version。)现在你需要创建一个临时变量:

<?php $data = $view->getViewArray(); echo htmlspecialchars($data['title']); ?>

(但也许你不应该把它放在一行,这很难读。也许把$viewData = $view->getViewArray()放在那个脚本的顶部;)

另一种方式( 方式 更优雅)是在类中实现ArrayAccess接口,因此您可以直接使用$view['title'] 。或者,如果您更喜欢使用对象访问而不是数组访问,则可以实现神奇的__get方法(以及__set__unset__isset方法(如果需要)。 )

答案 1 :(得分:2)

在PHP中,数组下标语法只能用于变量。你做不到$view->getViewArray()['title']。您需要将$view->getViewArray()的结果分配给变量,然后执行$variable['title']