Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO ¿Objeto no puede ser convertido a string?

Estas en el tema de ¿Objeto no puede ser convertido a string? en el foro de PHP en Foros del Web. Nota: el año pasado estaba trabajando en un framework, pero tuve que dejarlo, a la vuelta tuve una pérdida de datos y ahora estoy rehaciéndolo ...
  #1 (permalink)  
Antiguo 20/02/2015, 23:05
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
¿Objeto no puede ser convertido a string?

Nota: el año pasado estaba trabajando en un framework, pero tuve que dejarlo, a la vuelta tuve una pérdida de datos y ahora estoy rehaciéndolo de nuevo. Este es el esqueleto más básico del framework. Su funcionamiento es que recibe los parámetros del cliente y carga conforme a esos parámetros un módulo u otro; los módulos a su vez cargan clases del core y devuelven la vista con todos los datos procesados.

Intento cargar dinámicamente clases según la llamada al servidor.

Para ello primero configuré el .htaccess

Código Apache:
Ver original
  1. <IfModule mod_rewrite.c>
  2.     Options -Indexes
  3.     RewriteEngine On
  4.     RewriteCond %{REQUEST_FILENAME} !-f
  5.     DirectoryIndex index.php
  6.     RewriteRule ([^/]*)/*([^/]*)/*(.*) index.php?module=$1&method=$2&args=$3 [L]
  7. </IfModule>

A continuación antes de cualquier etiqueta HTML inicié sesión y el spl_autoload_register


Ya en el header establecí el <base> para el HTML

Código PHP:
Ver original
  1. <base href="<?php echo $_SERVER['DOCUMENT_ROOT']; ?>/blog/">


Luego en el index, donde se procesan las peticiones, tengo el siguiente código

Código PHP:
Ver original
  1. <?php
  2. try{
  3.                     if(filter_input_array(INPUT_GET)!==FALSE OR filter_input_array(INPUT_GET)!==FALSE){
  4.                     $get = ['module'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH],
  5.                             'method'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH],
  6.                             'args'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH]];
  7.                     $args = \filter_input_array(\INPUT_GET, $get);
  8.                    
  9.  
  10.                      //no incluyo los otros parámetros porque es una prueba para ver si instancia correctamente
  11.                     echo (new \controller\Front('\module\\'.$args['module']));
  12.                     }
  13.                 } catch (Exception $ex) {
  14.                     echo "pagina no encontrada";
  15.                 }
  16. ?>

En el controller, que es dónde llamo a las clases según sean front o back controller, tengo el siguiente código para probar que la carga dinámica funciona

Código PHP:
Ver original
  1. <?php
  2. namespace controller;
  3.  
  4. class Front{
  5.     public function __construct($module='\module\Home', $method=FALSE, $args=FALSE) {
  6.        
  7.         //no incluyo los otros argumentos porque sólo estoy viendo si funciona la carga dinámica
  8.         return (new $module->$method());
  9.     }
  10. }
  11. ?>

y en el home tengo el siguiente código

Código PHP:
Ver original
  1. <?php
  2. namespace module;
  3.  
  4. class Home{
  5.     public function __construct() {
  6.         return "hola";
  7.     }
  8. ?>

Entonces el problema que me devuelve es este

Código:
Catchable fatal error: Object of class controller\Front could not be converted to string in /srv/www/htdocs/blog/index.php on line 21
No entiendo por qué dice que no puede convertir un objeto a string, si el resultado debería ser un string, el string de la clase/modulo Home, no un objeto.

Alguien puede arrojarme luz sobre esto?

Acepto sugerencias.

Saludos.
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 21/02/2015, 11:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿Objeto no puede ser convertido a string?

¿Podrías explicarnos lo que produce la singuiente instrución?

Código PHP:
Ver original
  1. return (new $module->$method());

Además los constructores de clase no pueden devolver nada, es de manual, ¿si lo sabías verdad?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/02/2015, 17:07
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: ¿Objeto no puede ser convertido a string?

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Podrías explicarnos lo que produce la singuiente instrución?

Código PHP:
Ver original
  1. return (new $module->$method());

Además los constructores de clase no pueden devolver nada, es de manual, ¿si lo sabías verdad?

Ese era mi fallo :D gracias!
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:45.