Autor Tema: php Fatal error: Call-time pass-by-reference has been removed  (Leído 4074 veces)

gersofts

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Fatal error: Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of comprimir_arreglo(). in /home/gersofts/public_html/phpHotel/panel_facturas.php on line 24

-------------------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
<?php
include_once(
'inc/validar.inc');
chdir(dirname(__FILE__));
include_once('../general/inc/gestor_facturacion.php');
chdir(dirname(__FILE__));
include_once('inc/xajax/xajax.inc.php');

function comprimir_arreglo($array){
$new_array = array();
foreach ($array as $element){
array_push($new_array,$element);
}
$array $new_array;
}

function eliminar_facturas($arrFacturasPausadasJS,$arrFacturasEnCursoJS){
/* @var $gestor_facturacion Gestor_Facturacion */
$gestor_facturacion Gestor_Facturacion::getInstancia();
$respuesta = new xajaxResponse();
$host 1;
$arrFacturasPausadasBorrar = array();
$arrFacturasPausadasBD $gestor_facturacion->obtener_facturas_pausadas($host);
$arrFacturasPausadasBorrar array_diff($arrFacturasPausadasJS,$arrFacturasPausadasBD);
comprimir_arreglo(&$arrFacturasPausadasBorrar);
if(sizeof($arrFacturasPausadasBorrar) > 0){
$respuesta->addScriptCall('eliminar_facturas_pausadas',$arrFacturasPausadasBorrar);
}

$arrFacturasEnCursoBorrar = array();
$arrFacturasEnCursoBD $gestor_facturacion->obtener_facturas_en_curso($host);
$arrFacturasEnCursoBorrar array_diff($arrFacturasEnCursoJS,$arrFacturasEnCursoBD);
comprimir_arreglo(&$arrFacturasEnCursoBorrar);
if(sizeof($arrFacturasEnCursoBorrar) > 0){
$respuesta->addScriptCall('eliminar_facturas_en_curso',$arrFacturasEnCursoBorrar);
}
$respuesta->addScriptCall('obtener_facturas');
return $respuesta;
}

function agregar_facturas($arrFacturasPausadasJS,$arrFacturasEnCursoJS){
/* @var $gestor_facturacion Gestor_Facturacion */
$gestor_facturacion Gestor_Facturacion::getInstancia();
$respuesta = new xajaxResponse();
$host 1;
$arrFacturasPausadasAgregar = array();
$arrFacturasPausadasBD $gestor_facturacion->obtener_facturas_pausadas($host);
$arrFacturasPausadasAgregar array_diff($arrFacturasPausadasBD,$arrFacturasPausadasJS);
comprimir_arreglo(&$arrFacturasPausadasAgregar);
foreach ($arrFacturasPausadasAgregar as $factura_impresion_id){
if(($arrFactura $gestor_facturacion->obtener_datos_factura($factura_impresion_id))){
$respuesta->addScriptCall('agregar_factura',$arrFactura);
}
else{
$respuesta->addAlert('Se produjo un error al recuperar una factura');
}
}
$arrFacturasEnCursoAgregar = array();
$arrFacturasEnCursoBD $gestor_facturacion->obtener_facturas_en_curso($host);
$arrFacturasEnCursoAgregar array_diff($arrFacturasEnCursoBD,$arrFacturasEnCursoJS);
comprimir_arreglo(&$arrFacturasEnCursoAgregar);
foreach ($arrFacturasEnCursoAgregar as $factura_impresion_id){
if(($arrFactura $gestor_facturacion->obtener_datos_factura($factura_impresion_id))){
$respuesta->addScriptCall('agregar_factura',$arrFactura);
}
else{
$respuesta->addAlert('Se produjo un error al recuperar una factura');
}
}
return $respuesta;
}

function pausar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->pausar_factura($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede pausar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

function eliminar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->eliminar_factura_impresion($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede eliminar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

function reanudar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->reanudar_factura($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede reanudar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

$xajax = new xajax();
//$xajax->debugOn();
$xajax->registerFunction('eliminar_facturas');
$xajax->registerFunction('agregar_facturas');
$xajax->registerFunction('pausar_factura');
$xajax->registerFunction('eliminar_factura');
$xajax->registerFunction('reanudar_factura');
$xajax->processRequests();

$width['acciones'] = '15%';
$width['razon_social'] = '40%';
$width['fecha'] = '15%';
$width['hora'] = '15%';
$width['total'] = '15%';

$width['descripcion'] = '55%';
$width['cantidad'] = '15%';
$width['precio_unitario'] = '15%';
$width['subtotal'] = '15%';
?>

<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="Zend Studio" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Panel de facturas</title>
<link href="inc/estilos.css" rel="stylesheet" type="text/css" />
<link href="inc/estilo_autocomplete.css" rel="stylesheet" type="text/css" />
<?php $xajax->printJavascript("inc/xajax"); ?>
<script type="text/javascript" src="inc/scriptaculous/prototype.js"></script>
<script type="text/javascript" src="inc/scriptaculous/scriptaculous.js"></script>
<script language="JavaScript" type="text/javascript">
window.onload=inicializar;
var arrFacturasPausadasIds;
var arrFacturasEnCursoIds;

var Factura = Class.create();
Factura.prototype={
initialize: function(arrFactura){
this.factura_impresion_id = arrFactura.id_factura_impresion;
this.factura_id = arrFactura.id_factura;
this.pausada = arrFactura.pausada;
this.fecha = arrFactura.fecha;
this.hora = arrFactura.hora;
this.descuento = arrFactura.monto;
this.razon_social = arrFactura.nombre;
this.detalles = new Array();
this.total = arrFactura.total;
for (var i = 0 ; i < arrFactura.detalles.length ; i++){
this.detalles.push(arrFactura.detalles[i]);
}
},
pausar: function(){
xajax_pausar_factura(this.factura_impresion_id);
},
reanudar: function(){
xajax_reanudar_factura(this.factura_impresion_id);
},
eliminar: function(){
if(confirm("¿Esta seguro que desea eliminar la factura?\n(Esta acción es irreversible)")){
xajax_eliminar_factura(this.factura_impresion_id);
}
},
expandir: function(boton,objFactura){
boton.onclick = function(){objFactura.contraer(boton,objFactura)};
Effect.SlideDown('divDetalles_' + this.factura_impresion_id,{afterFinish:function(){
boton.src = 'images/fold.gif';
}});
},
contraer: function(boton,objFactura){
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
Effect.SlideUp('divDetalles_' + this.factura_impresion_id,{afterFinish:function(){
boton.src = 'images/unfold.gif';
}});
}
}

function reset(){
var i;
arrFacturasPausadasIds = new Array();
arrFacturasEnCursoIds = new Array();
for(i = 0 ; i < $('divFacturasEnCurso').childNodes.length ; i++){
if($('divFacturasEnCurso').childNodes[i].tagName== "DIV"){
$('divFacturasEnCurso').childNodes[i].parentNode.removeChild($('divFacturasEnCurso').childNodes[i]);
i--;
}
}
for(i = 0 ; i < $('divFacturasPausadas').childNodes.length ; i++){
if($('divFacturasPausadas').childNodes[i].tagName== "DIV"){
$('divFacturasPausadas').childNodes[i].parentNode.removeChild($('divFacturasPausadas').childNodes[i]);
i--;
}
}
obtener_facturas();
}

function inicializar(){
arrFacturasPausadasIds = new Array();
arrFacturasEnCursoIds = new Array();
obtener_facturas();
new PeriodicalExecuter(function(){ actualizar_facturas();},10);
}

function agregar_factura(arrFactura){
var objFactura = new Factura(arrFactura);
var div = "";
var id = arrFactura.id_factura_impresion;
var boton;
if($('divFactura_' + id)){
return false;
}
div += '<div id="divFactura_' + id + '" style="display:none" width="100%">';
div += '<table width="100%" class="texto_comun">';
div += '<tr>';
div += '<td width="<?=$width['acciones']?>" id="tdBotonera_' + id + '"></td>';
div += '<td width="<?=$width['razon_social']?>"><img src="images/unfold.gif" class="boton" id="btnPlus_' + id + '">&nbsp;' + objFactura.razon_social + '</td>';
div += '<td width="<?=$width['fecha']?>">' + objFactura.fecha + '</td>';
div += '<td width="<?=$width['hora']?>">' + objFactura.hora + '</td>';
div += '<td width="<?=$width['total']?>">$ ' + objFactura.total + '</td>';
div += '</tr>';
if (objFactura.detalles.length > 0){
div += '<tr><td></td><td colspan="4">';
div += '<div id="divDetalles_' + id + '" style="display:none;border:solid;border-width:thin" width="100%"><table width="100%" class="texto_comun">';
div += '<tr>';
div += '<td width="<?=$width['descripcion']?>"><b>Descripci&oacute;n</b></td>';
div += '<td width="<?=$width['cantidad']?>"><b>Cantidad</b></td>';
div += '<td width="<?=$width['precio_unitario']?>"><b>Precio unitario</b></td>';
div += '<td width="<?=$width['subtotal']?>"><b>Total</b></td>';
div += '</tr>';
for(var i = 0; i < objFactura.detalles.length; i++){
div += '<tr>';
div += '<td>' + objFactura.detalles[i].descripcion + '</td>';
div += '<td>' + objFactura.detalles[i].cantidad + '</td>';
div += '<td>$ ' + objFactura.detalles[i].precio_unitario + '</td>';
div += '<td>$ ' + objFactura.detalles[i].total + '</td>';
div += '</tr>';
}
if(!(objFactura.descuento == '0,00')){
div += '<tr>';
div += '<td>Descuento</td>';
div += '<td>&nbsp</td>';
div += '<td>&nbsp</td>';
div += '<td>$ ' + objFactura.descuento + '</td>';
div += '</tr>';
}
div += '</table></div></td></tr>';
}
div += '</table>';
div += '</div>';
if (objFactura.pausada == 1){
arrFacturasPausadasIds.push(id);
new Insertion.Bottom('divFacturasPausadas',div);
boton = Builder.node('img', {id: 'btnDelete_' + id, src: 'images/trash.png', className: 'boton',  width: '30', height: '30'});
boton.onclick = function(){objFactura.eliminar()};
$('tdBotonera_' + id).appendChild(boton);
boton = Builder.node('img', {id: 'btnPlay_' + id, src: 'images/play.png', className: 'boton', width: '30', height: '30'});
boton.onclick = function(){objFactura.reanudar()};
$('tdBotonera_' + id).appendChild(boton);
boton = $('btnPlus_' + id);
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
$('divFactura_' + id).className = 'factura_pausada';
}
else{
arrFacturasEnCursoIds.push(id);
new Insertion.Bottom('divFacturasEnCurso',div);
boton = Builder.node('img', {id: 'btnDelete_' + id, src: 'images/trash.png', className: 'boton',  width: '30', height: '30'});
boton.onclick = function(){objFactura.eliminar()};
$('tdBotonera_' + id).appendChild(boton);
boton = Builder.node('img', {id: 'btnPause_' + id, src: 'images/pause.png', className: 'boton', width: '30', height: '30'});
boton.onclick = function(){objFactura.pausar()};
$('tdBotonera_' + id).appendChild(boton);
boton = $('btnPlus_' + id);
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
$('divFactura_' + id).className = 'factura_en_curso';
}
Effect.SlideDown('divFactura_' + id);
}

function eliminar_facturas_pausadas(arrFacturasEliminarIds){
for(var i = 0; i < arrFacturasEliminarIds.length; i++){
$('divFactura_' + arrFacturasEliminarIds[i]).parentNode.removeChild($('divFactura_' + arrFacturasEliminarIds[i]));
arrFacturasPausadasIds.splice(arrFacturasPausadasIds.indexOf(arrFacturasEliminarIds[i]),1);
}
}

function eliminar_facturas_en_curso(arrFacturasEliminarIds){
for(var i = 0; i < arrFacturasEliminarIds.length; i++){
$('divFactura_' + arrFacturasEliminarIds[i]).parentNode.removeChild($('divFactura_' + arrFacturasEliminarIds[i]));
arrFacturasEnCursoIds.splice(arrFacturasEnCursoIds.indexOf(arrFacturasEliminarIds[i]),1);
}
}

function obtener_facturas(){
xajax_agregar_facturas(arrFacturasPausadasIds,arrFacturasEnCursoIds);
}

function actualizar_facturas(){
xajax_eliminar_facturas(arrFacturasPausadasIds,arrFacturasEnCursoIds);
}

</script>
</head>
<body>
<table width="80%">
<tr bgcolor="#FFCC00" class="titulo_medio">
<td>Facturas en curso</td>
</tr>
<tr>
<td><div id="divFacturasEnCurso">
<table width="100%" class="titulochico" cellspacing="0"><tr bgcolor="#EEEEEE">
<td width="<?=$width['acciones']?>">Acciones</td>
<td width="<?=$width['razon_social']?>">Razón Social</td>
<td width="<?=$width['fecha']?>">Fecha</td>
<td width="<?=$width['hora']?>">Hora</td>
<td width="<?=$width['total']?>">Total</td>
</tr></table>
</div></td>
</tr>
</table>
<br>
<table width="80%">
<tr bgcolor="#FFCC00" class="titulo_medio">
<td>Facturas pausadas</td>
</tr>
<tr>
<td><div id="divFacturasPausadas">
<table width="100%" class="titulochico" cellspacing="0"><tr bgcolor="#EEEEEE">
<td width="<?=$width['acciones']?>">Acciones</td>
<td width="<?=$width['razon_social']?>">Razón Social</td>
<td width="<?=$width['fecha']?>">Fecha</td>
<td width="<?=$width['hora']?>">Hora</td>
<td width="<?=$width['total']?>">Total</td>
</tr></table>
</div></td>
</tr>
</table>
<br>
<div align="center" style="width:80%"><input type="button" value="Recargar" onclick="reset()" class="texto_comun"><div></div>
</body>
</html>
« Última modificación: 23 de Octubre 2014, 15:19 por Jorge lopez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
php Fatal error: Call-time pass-by-reference has been removed
« Respuesta #1 en: 23 de Octubre 2014, 11:50 »
Hola, en primer lugar por favor cuando escribas mensajes en el foro sigue las indicaciones que se dan aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Es importante seguirlas para que las consultas puedan ser respondidas.

Sobre el error que estás obteniendo, parece que se debe a la llamada de función con esta sintaxis:

comprimir_arreglo(&$arrFacturasPausadasBorrar);

De acuerdo con la documentación oficial de php, no existe ningún signo de referencia en una llamada a una función - sólo en la definición de la función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el argumento por referencia. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use & en foo(&$a);. A partir de PHP 5.4.0, el paso por referencia en tiempo de llamada ha sido eliminado, por lo que su uso emitirá un error fatal.

Si necesitas que el argumento sea pasado por referencia tienes que definir la función como function comprimir_arreglo(&$array){ ... }

donde el símbolo & indica que el argumento se pasará por referencia.

La llamada a la función será simplemente comprimir_arreglo($arrFacturasPausadasBorrar);

En caso de que quieras que el argumento se pase por valor debes definir la función como function comprimir_arreglo($array){ ... } y hacer la llamada como comprimir_arreglo($arrFacturasPausadasBorrar);



gersofts

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:php Fatal error: Call-time pass-by-reference has been removed
« Respuesta #2 en: 23 de Octubre 2014, 17:48 »
Gracias lo corregi cambiando  : comprimir_arreglo(&$arrFacturasPausadasBorrar); por

comprimir_arreglo($arrFacturasPausadasBorrar);

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".