strip_tags remove quitar para funcion etiquetas ejemplo php

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