2010-04-23 13 views
6

ottengo questo errore dal mio script:

[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/ 

ecco il codice che produce l'errore:

<?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"; 
} 
+1

Hai provato a rinominare $ questo per qualcos'altro. – corn3lius

risposta

22

$this è una variabile predefinita in PHP.

Ecco il riferimento nel manuale PHP: Classes and Objects: The Basics. Descrive come, all'interno di un metodo, $ questo punta a "questo oggetto" su cui si sta operando. È ancora riservato al di fuori di un metodo, però.

Modificare l'identificatore in un'altra parola.

11

$this è una variabile speciale php. Se questo codice si sta verificando all'interno di una classe, $this è un riferimento all'oggetto su cui viene invocato il metodo. Non è possibile assegnare un nuovo valore a $this all'interno di una classe. È una limitazione di PHP che non è possibile assegnare a una variabile denominata $this al di fuori di una classe, dove altrimenti sarebbe valida per farlo.

Credo che questo fosse valido in PHP4, ma a partire da PHP5 Dovrai scegliere un nuovo nome di variabile.

+0

Beh, non è in una classe, ma grazie comunque, e anche a quello sopra. Ottiene l'assegno, tuttavia, perché apparentemente non funziona al di fuori di una classe. –

+0

No, come ho detto, è una limitazione di PHP. Non puoi assegnare a '$ this' in nessun contesto, all'interno del nostro esterno di un metodo di classe. – meagar

+0

Bene, questo è venuto dopo. L'altro ragazzo ha capito bene la prima volta ;-) Grazie, comunque –

3

io non sono davvero un esperto di PHP, ma penso che $this si riferisce l'oggetto corrente, quindi se si imposta this a null, si tenta di impostare l'oggetto corrente a nulla, wich non può funzionare.

1

È possibile riassegnare $this valore variabile variabile

$name = 'this'; 
$$name = 'stack'; 
echo $this; 
// this will result stack 
Problemi correlati