elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Fatal error: Cannot access empty property in...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fatal error: Cannot access empty property in...  (Leído 4,475 veces)
Thaorius


Desconectado Desconectado

Mensajes: 1.073


Ver Perfil WWW
Fatal error: Cannot access empty property in...
« en: 28 Diciembre 2006, 05:53 am »

Hola a todos.

Tengo un pequeño problemita, en mi cms, tengo esta funcion que me carga las librerias de funciones para su uso, el problema es que yo nesecito que las librerias cargadas(clases) queden disponibles al usuario de esta forma:
Código:
$core->nombre_libreria
De esta forma el usuario hace esto:
Código:
$core->load_library("LoadableModule");
y la libreria LoadableModule es cargada apra darle soporte de modulos al sistema, entonces despues el usuario puede hacer:
Código:
$core->modules->add_module($module_descriptor);

No se si se entiende, el problema se produce al ejecutar este codigo:
Código:
if ($instantiate)
{
$class_name = 'TWS_'.$class;
if(class_exists($class_name))
{
$this->objects[$class] =& new $class_name();
$kernel_var = $this->objects[$class]->get_kernel_var();
$this->$kernel_var = $this->objects[$class]; // ACA es el error!
} else {
trigger_error("Kernel panic: Can't load the requested library(".$class."). The library is corrupted.", E_USER_ERROR);
}
}
Entonces, php me dice que para acceder a $this->kernel_var que le saque el $, pero yo no quiero acceder a $this->kernel_var, sino a $this->nombre_dinamico_contenido_en_kernel_var, entonces mi pregunta es, como hago para crear una variable de clase dinamicamente?

PD: uso PHP5.

Saludos y muchas gracias


En línea

Si te sirvio mi aporte, encontrarás más en www.teoxstudios.com. Gracias!
Buscando un buen hosting? Click aquí
Ertai
Colaborador
***
Desconectado Desconectado

Mensajes: 2.025


Ralph Wiggum


Ver Perfil
Re: Fatal error: Cannot access empty property in...
« Respuesta #1 en: 30 Diciembre 2006, 00:31 am »

Has probado declarando una variable dinamicamente? No tengo nada de tiempo para probarlo, pero no pierdes nada por mirar...

Código:
var $$kernel_var;

Saludos.


En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
Thaorius


Desconectado Desconectado

Mensajes: 1.073


Ver Perfil WWW
Re: Fatal error: Cannot access empty property in...
« Respuesta #2 en: 30 Diciembre 2006, 06:09 am »

No, no probe, en cuenta, descubri una solucion mucho mas elegante.
Como no encontraba com oarreglarlo y nadie me contestaba, busque la info de oop de php, pero claro, la ultima vez que la vi era de php4, valla sorpresa me lleve cuando vi las mejoras en l oque respecta a oop de php5. Con las funciones magicas, __get, __set, __isset, __unset arregle todo, junto con el array $objects.

Por si alguien le interesa el ejemplo, aca les dejo:
Código:
<?php
/* Check constants */
if(!defined('KERNELBASE')) trigger_error("KERNELBASE not defined.", E_USER_ERROR);
if(!defined('SELFLOC')) trigger_error("SELFLOC not defined.", E_USER_ERROR);

/* Include base API */
require_once(KERNELBASE.'core/Base.php');
require_once(KERNELBASE.'core/Library.php');
require_once(KERNELBASE.'core/KernelException.php');

/* Core class */
class TWS_Core extends TWS_Base
{
private $objects = array();
public $config;

/* Default constructor */
public function __construct()
{
/* Call TWS_Base constructor */
parent::__construct('TWS_Core');

/* Define kernel constants */
define('KERNELVERSION', '3.0');
define('KERNELSTATUS', '1');
}

private function __get($prop)
{
if(isset($this->objects[$prop]))
{
return $this->objects[$prop];
} else {
throw new KernelException("TWS_Core::__get", "Attemp to read from undefined property($prop).");
}
}

private function __set($prop, $value)
{
if(isset($this->objects[$prop]))
{
return $this->objects[$prop];
} else {
throw new KernelException("TWS_Core::__set", "Attemp to write to undefined property($prop).");
}
}

private function __isset($prop)
{
return isset($this->objects[$prop]);
}

private function __unset($prop)
{
if(isset($this->objects[$prop]))
{
unset($this->objects[$prop]);
} else {
throw new KernelException("TWS_Core::__unset", "Attemp to delete undefined property($prop).");
}
}

/* Kernel start-up routine */
public final function core_start()
{
/* Disable magic quotes */
set_magic_quotes_runtime(0);

/* Load config */
include(KERNELBASE.'config/core.conf.php');
$this->config = $core;

/* Load DataBaseEngine */
try {
$this->load_library('DataBaseEngine');

/* Start database engine */
$this->db->start_engine();

/* Load the other basic libraries */
$this->load_library('LoadableModule');
$this->load_library('LoadableTemplate');
$this->load_library('DynamicMenu');
} catch(KernelException $e) {
$e->printKernelPanic();
die();
}
}

public final function load_library($class, $instantiate = true)
{
if (isset($this->objects[$class]))
{
return;
}

if (file_exists(KERNELBASE.'core-libs/'.$class.'.lib.php'))
{
require(KERNELBASE.'core-libs/'.$class.'.lib.php');
}
else
{
if (file_exists(KERNELBASE.'libs/'.$class.'.lib.php'))
{
require(KERNELBASE.'libs/'.$class.'.lib.php');
}
else
{
throw new KernelException("TWS_Core::load_library", "Can't load the requested library(".$class."). The library doesn't exists.");
return;
}
}

if ($instantiate)
{
$class_name = 'TWS_'.$class;
if(class_exists($class_name))
{
$tmp =& new $class_name(&$this);
$this->objects[$tmp->get_kernel_var()] = $tmp;
} else {
throw new KernelException("TWS_Core::load_library", "Can't load the requested library(".$class."). The library is corrupted.");
}
}
return;
}

public final function get_loaded_libraries()
{
return $this->objects;
}

public final function install_library($location)
{
if(file_exists($location))
{
copy($location, KERNELBASE.'libs/');
}
return;
}

public final function uninstall_library($name)
{
if(file_exists(KERNELBASE.'libs/'.$name.'.lib.php'))
unlink(KERNELBASE.'libs/'.$name.'.lib.php');
}
}
?>

Gracias de todas formas.

Un Saludo
En línea

Si te sirvio mi aporte, encontrarás más en www.teoxstudios.com. Gracias!
Buscando un buen hosting? Click aquí
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[MOD] Mensaje de error: Dma controller error - fatal error system halted « 1 2 »
Hardware
evgeni1970 14 22,248 Último mensaje 6 Noviembre 2011, 22:27 pm
por evgeni1970
fatal error C1083
Bases de Datos
flony 2 4,204 Último mensaje 21 Enero 2013, 05:16 am
por flony
error Cannot read property 'style' of null
Desarrollo Web
SrTrp 2 3,243 Último mensaje 26 Diciembre 2017, 00:41 am
por SrTrp
javascript Error: Cannot read property '1' of undefined
Desarrollo Web
SrTrp 2 3,026 Último mensaje 9 Octubre 2020, 00:42 am
por SrTrp
Error Cannot set property 'disabled' of null
Desarrollo Web
SrTrp 2 3,789 Último mensaje 24 Julio 2021, 07:39 am
por SrTrp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines