PHP致命错误:无法重新分配$ this

时间:2010-04-23 15:00:48

标签: php

我从我的脚本中收到此错误:

[Fri Apr 23 10:57:42 2010] [error] [client 10.0.0.1] PHP Fatal error:  Cannot re-assign $this in C:\\Program Files\\Apache Software Foundation\\Apache2.2\\htdocs\\abp\\fol\\test.php on line 27, referer: http://abp.bhc.com/fol/

以下是产生错误的代码:

<?php
$voiceboxes = array(
    '141133'    => array(
        'title' => 'Title',
        '1'     => array(
            'Title' => 'Title2',
            'Link'  => 'http://...',
        ),
        '12'    => array(
            'Title' => 'Title3',
            'Link'  => 'http://...',
        )
    ),
    '1070453'   => array(
        'title' => 'Title4',
        '1'     => array(
            'Title' => 'Title5',
            'Link'  => 'http://...',
        )
    )
);
$last = 0;
//$this = 0;
echo "<ol>\n";
foreach ($voiceboxes as $key => $value) {
    $last = 0;
    $this = null; //Error is thrown here, Line 27
    //$voiceboxes[$key]['title']
    echo "<ol>\n";
    foreach ($value as $key2 => $value2) {
        if ($key2 == 'title') {
            echo "<li>$value2</li>\n";
        } else {
            $this = (int) $key2;
            if ($this == $last + 1) {
                echo '<li>';
            } else { '<li value="' . $key2 . '">';}
            $last = $key2;
            echo $voiceboxes[$key][$key2]['Title'] . "<br/>" . $voiceboxes[$key][$key2]['Link'] . '</li>' . "\n";
        }
    }
    echo "</ol>\n";
}

4 个答案:

答案 0 :(得分:24)

$this是PHP中的预定义变量。

以下是PHP手册中的参考:Classes and Objects: The Basics。它描述了在方法中,$ this指向正在操作的“此对象”。但它仍然保留在方法之外。

将标识符更改为另一个单词。

答案 1 :(得分:11)

$this是php中的一个特殊变量。如果此代码发生在类中,则$this是对正在调用该方法的对象的引用。您无法在班级内为$this分配新值。这是PHP的一个限制,你也无法将其分配给类之外的名为$this的变量,否则它将有效。

我相信这在PHP4中是有效的,但从PHP5开始,你必须选择一个新的变量名。

答案 2 :(得分:3)

我不是真正的PHP专家,但我认为$this指的是当前对象,因此如果将this设置为null,则尝试设置当前对象无所事事,无法发挥作用。

答案 3 :(得分:1)

您可以按变量

重新分配$this
$name = 'this';
$$name = 'stack';
echo $this;
// this will result stack