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:(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
ArrayAccessinterface 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__getmethod (and__set,__unsetand__issetmethods, if you need them.)