2010-09-15 16 views
0

Class_view.php包含类定义为一个关联数组: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"); 

而引起的代码错误在UI_Header.php,在“标题”HTML标签附近:

<?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'相关联的值。

我得到的错误是:

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

+0

*(related)* [Array dereferencing](http://schlueters.de/blog/archives/138-Features-in-PHP-trunk-Array-dereferencing.html) – Gordon 2010-09-15 15:11:06

回答

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方法,如果需要的话)。

+0

谢谢。 ArrayAccess接口在我头上 - 我无法按照手册的说明进行操作。也许在几个月内...... – JDelage 2010-09-15 15:17:11

+0

@JDelage:只需将四个方法(以'offset'开头的那些方法)复制到'View'类中,并用'$ this->'替换'$ this-> container'的所有出现。 viewArray'。现在,您可以像使用数组一样使用类的实例('$ view = new View;')。所以要设置你使用'$ view ['title'] ='一些不错的标题'的标题''而不是'$ view-> addToViewArray('title','一些不错的标题')'并且得到你使用的标题'echo $ view ['title'];';) – NikiC 2010-09-15 15:45:49

2

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

+0

这很好理解,谢谢。 – JDelage 2010-09-15 15:17:30