2010-04-23 21 views
6

consigo este error de mi 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/ 

Este es el código que produce el error:

<?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

Ha intentado cambiar el nombre de este $ a otra cosa. – corn3lius

Respuesta

22

$this es una variable predefinida en PHP.

Aquí está la referencia en el manual de PHP: Classes and Objects: The Basics. Describe cómo, dentro de un método, $ esto apunta a "este objeto" que está siendo operado. Sin embargo, todavía está reservado fuera de un método.

Cambia el identificador a otra palabra.

11

$this es una variable especial en php. Si este código se lleva a cabo dentro de una clase, $this es una referencia al objeto sobre el que se invoca el método. No puede asignar un nuevo valor al $this dentro de una clase. Es una limitación de PHP que tampoco puede asignar a una variable llamada $this fuera de una clase, donde de otro modo sería válido hacerlo.

Creo que esto era válido en PHP4, pero a partir de PHP5 tendrá que elegir un nuevo nombre de variable.

+0

Bueno, no está en una clase, pero gracias de todos modos, y también a la de arriba. Obtiene el cheque, sin embargo, porque aparentemente tampoco funciona fuera de una clase. –

+0

No, como dije, es una limitación de PHP. No puede asignar '$ this' en ningún contexto, dentro de nuestro método fuera de clase. – meagar

+0

Bueno, eso vino después. El otro chico lo hizo bien la primera vez ;-) Gracias, de todos modos –

3

No estoy realmente un experto en PHP, pero yo creo $this se refiere al objeto actual, por lo que si se establece this a null, se intenta establecer el objeto actual en nada, cosa que no puede trabajar.

1

Puede reasignar $this valor de la variable

$name = 'this'; 
$$name = 'stack'; 
echo $this; 
// this will result stack 
Cuestiones relacionadas