PHP parse error - please point out the coding horror [closed]
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']
.
精彩评论