开发者

PHP parse error - please point out the coding horror [closed]

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 9 years ago.

Class_view.php contains the class definition as an associative array:

class View
{
    private $viewArray = array();   

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

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

In Index.php I have:

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

And the code that causes the error is in UI_Header.php, around the开发者_运维知识库 "title" HTML tag:

<?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>

I'm trying to get the value associated with the key 'title' to show here.

The error I get is:

Parse error: parse error in Header.php on line 7


The problem is $view->getViewArray()['title']. PHP doesn't support this yet (it will be included in the next PHP version.) For now you need to create a temporary variable:

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

(But maybe you shouldn't put that in one line, it's hard to read. Maybe put a $viewData = $view->getViewArray() at the top of that script ;)

Another way (which is way more elegant) is to implement the ArrayAccess interface in the class, so you could directly use $view['title']. Or, alternatively, if you prefer using object access over array access you could implement the magic __get method (and __set, __unset and __isset methods, if you need them.)


In PHP, the array subscript syntax can only be used on a variable. You can't do $view->getViewArray()['title']. You need to assign the result of $view->getViewArray() to a variable, then do $variable['title'].

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜