Soporte » WordPress Avanzado » Deprecated: Function create_function()

  • ResueltoModerador almendron

    (@almendron)


    Estoy comprobando los plugins que uso para ver su compatibilidad con PHP 7.2 y me he encontrado esa función en uno de ellos. En concreto Broken Link Checker.

    1.- Archivo core.php

    uasort($modules['container'], create_function('$a, $b', 'return strcasecmp($a["Name"], $b["Name"]);'));

    ¿Podría ser la solución poner lo siguiente en su lugar?

    usort($modules['container'], function($a, $b) {
    	return strcasecmp($a["Name"], $b["Name"]);
    });

    2.- Archivo http.php

    function urlencodefix($url){
    	//TODO: Remove/fix this. Probably not a good idea to "fix" invalid URLs like that.  
    	return preg_replace_callback(
    		'|[^a-z0-9\+\-\/\\#:.,;=?!&%@()$\|*~_]|i', 
    		create_function('$str','return rawurlencode($str[0]);'), 
    		$url
    		);
    }

    ¿Podría valer lo siguiente?:

    return preg_replace_callback('|[^a-z0-9\+\-\/\\#:.,;=?!&%@()$\|*~_]|i', function ($str) { return rawurlencode($str[0]); }, $url);

    *********************

    Por último en el plugin CMS Tree Page View (archivo functions.pphp):

    $new_func_name = create_function('', "cms_tpv_dashboard('$one_dashboard_post_type');");

    Este ni idea de como cambiar la función obsoleta.

    • Este debate fue modificado hace 5 años, 12 meses por almendron.
    • Este debate fue modificado hace 5 años, 12 meses por almendron.
    • Este debate fue modificado hace 5 años, 12 meses por almendron.
Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador LGrusin

    (@lgrusin)

    Pues la verdad que está complicado, según he podido leer concretamente la última podría ser:

    function() {
    $new_func_name = cms_tpv_dashboard('$one_dashboard_post_type');}

    La primera podría ser, la segunda tengo dudas.

    Seguiré investigando pero puedes encontrar bastantes ejemplos de código buscando por
    PHP 7.2 Function create_function() is deprecated

    Un saludo

    Moderador almendron

    (@almendron)

    Yo he probado en local con

    $new_func_name = function() { return cms_tpv_dashboard('$one_dashboard_post_type'); };

    y parece que funciona. probaré tu sugerencia aunque creo que es lo mismo una que otra.

    Para el primer error me fijé en https://github.com/phacility/xhprof/pull/99/commits/d4f8ec56f59ddd2a79df1424c16fd32e437e8a34

    Para el segundo, seguí las instrucciones de preg_replace_callback y solo sustituí la parte de create_function

    El problema con las dos primeras es que tengo que hacer cosas con ese plugin porque no me da mensajes de error. Con el segundo plugin, en cambio, sí que me da.

    Yo también seguiré investigando.

    Moderador almendron

    (@almendron)

    Para el segundo caso he encontrado un ejemplo que parece indicar que está bien lo que he puesto:

    https://www.drupal.org/project/features/issues/2931464 (en el punto 1. in function features_clean_title (file features.menu.inc))

    En principio parecen buenas las soluciones que has propuesto (no las he podido probar).

    De todas formas, ten en cuenta que create_function() sigue funcionando en PHP 7.2 sin problemas. Genera un error tipo warning («aviso») para avisar (valga la redundancia) de que en el futuro puede dejar de funcionar. Ese tipo de errores suelen estar «apagados» en producción y la web/aplicación seguirá funcionando perfectamente, se suelen activar solo en desarrollo para estar avisados.

    Lo suyo sería contactar con el soporte de los plugins afectados y preguntarles directamente para que actualicen su código, ¿no?

    Moderador almendron

    (@almendron)

    Gracias @cybmeta

    Las pruebas las estoy realizando en local con el debug activado y por eso me salen esas alertas.

    Y sí, es cierto que los autores de los plugins deberían actualizar su código pero a fecha de hoy aún no lo han hecho. Lo cierto es que en todos y cada de los plugisn ya hay abiertos hilos con esta cuestión pero, como digo, no hay respuesta de momento.

    @lgrusin : gracias también a ti por echar una mano.

    Creo que podemos dar por resuelto el hilo.

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Deprecated: Function create_function()’ está cerrado a nuevas respuestas.