php - remove - strip_tags wordpress
Advertencia de PHP: la referencia de paso de llamada ha quedado obsoleta (2)
Recibo la advertencia: la Call-time pass-by-reference has been deprecated
para las siguientes líneas de código:
function XML() {
$this->parser = &xml_parser_create();
xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
xml_set_object(&$this->parser, &$this);
xml_set_element_handler(&$this->parser, ''open'',''close'');
xml_set_character_data_handler(&$this->parser, ''data'');
}
function destruct() {
xml_parser_free(&$this->parser);
}
function & parse(&$data) {
$this->document = array();
$this->stack = array();
$this->parent = &$this->document;
return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL;
}
¿Qué causa y cómo solucionarlo?
Eliminar &
de &$this
todas partes, no es necesario. De hecho, creo que puedes eliminar &
en todas partes en este código, no es necesario en absoluto.
Larga explicación
PHP permite pasar variables de dos maneras: "por valor" y "por referencia". Primera vía ("por valor"), no puede modificarlos, otra segunda vía ("por referencia") puede:
function not_modified($x) { $x = $x+1; }
function modified(&$x) { $x = $x+1; }
Tenga en cuenta el &
signo. Si llamo modified
a una variable, se modificará, si not_modified
, después de que retorna, el valor del argumento será el mismo.
La versión anterior de PHP permitía simular el comportamiento de modified
con not_modified
haciendo esto: not_modified(&$x)
. Esto es "pase de tiempo de llamada por referencia". Está en desuso y nunca se debe usar.
Además, en versiones PHP muy antiguas (léase: PHP 4 y anteriores), si modifica objetos, debe pasarlo por referencia, por lo tanto, el uso de &$this
. Esto ya no es necesario ni recomendado, ya que los objetos siempre se modifican cuando pasan a la función, es decir, esto funciona:
function obj_modified($obj) { $obj->x = $obj->x+1; }
Esto modificaría $obj->x
aunque formalmente se pasa "por valor", pero lo que se pasa es manejador de objeto (como en Java, etc.) y no la copia del objeto, como lo fue en PHP 4.
Esto significa que, a menos que esté haciendo algo extraño, casi nunca necesitará pasar un objeto (y por lo tanto $this
por referencia, ya sea por tiempo de llamada o de otra manera). En particular, su código no lo necesita.
En caso de que se lo pregunte, un pase en tiempo de llamada por referencia es una característica de PHP en desuso que promueve el tipado libre de PHP. Básicamente, le permite pasar una referencia (algo así como un puntero C) a una función que no ha pedido específicamente una. Es la solución de PHP para la clavija cuadrada en un problema de agujeros redondos.
En tu caso, nunca hagas referencia a $this
. Fuera de una clase, una referencia a $this
no le permitirá acceder a sus métodos y campos privados.
Ejemplo:
<?php
function test1( $test ) {} //This function doesn''t want a reference
function test2( &$test ) {} //This function implicitly asks for a reference
$foo = ''bar'';
test2( $foo ); //This function is actually given a reference
test1( &$foo ); //But we can''t force a reference on test1 anymore, ERROR
?>