Resulta que una variable que contiene un string, la función empty() devuelve true. Este es el código:
Código PHP:
Ver original
y esta es la salida:
Código:
Tenéis alguna idea de por qué pasa esto? Me da que es imposible que diga que está vacía una propiedad de un objeto que contiene un string.string(36) "Baño 20m2 reforma integral y barato" bool(true)
Como curiosidad, nunca me había pasado y siempre utilizo unos objetos propios en el que $presupuesto apunta a un registro de la bd, y cada propiedad sería un campo de ese registro ($presupuesto->subject apunta al campo "subject" de la tabla "presupuestos"). Dejo aquí el código que tengo para ello por si es de interés:
Código PHP:
Ver original
<?php class ObjetoDatosVariables { private $datos, $tabla, $identificador; public function __construct($data, $table, $pkey) { $this->datos = $data; $this->tabla = $table; $this->identificador = $pkey; } public function __invoke($array) { global $_BD; $sets = ""; foreach ($array as $k => $v) { $sets .= " {$k}={$v},"; } $sets[-1] = ""; $_BD->Consultar("UPDATE {$this->tabla} SET{$sets} WHERE {$this->identificador}=%s", $this->datos[$this->identificador]); } public function __set($k, $v) { global $_BD; $this->datos[$k] = $v; $_BD->Consultar("UPDATE {$this->tabla} SET {$k}=%s WHERE {$this->identificador}=%s", $v, $this->datos[$this->identificador]); return $v; } public function __get($k) { return $this->datos[$k]; } }; ?>
con este código, el __get() me trae la consulta relacionada que hago previamente en un controlador, y el __set() me permite modificar campos fácilmente.
Código PHP:
Ver original
echo $presupuesto->subject; //__get() $presupuesto->subject = "Otro valor"; // __set()
Gracias por vuestra ayuda.
Saludos.
[EDITO]
He encontrado esta nota en el manual de php.net
Cita:
¿Esto quiere decir que $presupuesto es un objeto inaccesible? ¿Y por qué? ¿Lo podría solucionar con ese __isset()? Cuando se utiliza empty() sobre las propiedades de objetos inaccesibles, el método sobrecargado __isset() será llamado, si se declara.
Gracias por vuestra sabiduría.