Ver Mensaje Individual
  #18 (permalink)  
Antiguo 27/05/2009, 15:19
Avatar de jam1138
jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Problema con libreria RTF

Perfecto, llegamos al verdadero problema.

Primero, instanceof está disponible a partir de PHP5, con PHP4 simplemente no funcionará. En su lugar debería utilizar is_a() que está disponible a partir de PHP 4.2 ... como te dije en tu otro tema esta clase tiene sintaxis de PHP4 ... como sea, aquí es donde está lo raro, ya que dices que utilizas la versión 4.2.1, ¿completamente seguro de eso?, ¿utilizaste alguna instalación particular?.

Habría que ver qué de especial tiene tu version/instalación de PHP, algo no está funcionando. Igual repito mi recomendación inicial: cámbiate a PHP5; PHP4 ya es obsoleto, ¿qué razón tienes para no hacerlo?.

Entendiendo el código, lo que se pretende hacer con is_a() e instanceof es comprobar que una variable es un objeto de determinado tipo, ya que tienes problema con la definición de dichas funciones (aunque instanceof es un operador, no una función), podrías probar utilizando get_class(), que te regresa el nombre de la clase.

Por ejemplo, en la línea que mencionas te muestra el error se tiene esto:
Código php:
Ver original
  1. $content = (is_a($parFormat, 'ParFormat') && count($this->elements) != 0 && empty($this->emptyPar)) ? '\par ' : '';
Debería cambiarse por esto:
Código php:
Ver original
  1. $content = ((get_class($parFormat) == 'ParFormat') && count($this->elements) != 0 && empty($this->emptyPar)) ? '\par ' : '';
¿observas?, se obtiene el nombre de la clase y se compara como un string común.

... para no tener que cambiar todo el código donde aparece is_a(), igual podrías definirla tú mismo e imitar su funcionamiento. Podrías colocar lo siguiente en tuArchivo.php, antes de incluir la clase:

Código php:
Ver original
  1. <?php
  2.  
  3. if (!function_exists('is_a')) {
  4.     function is_a($objeto, $clase) {
  5.         $obClass = get_class($objeto);
  6.         return ($obClass == $clase);
  7.     }
  8. }
  9. // Y, entonces, ahora sí está definida is_a() con un comportamiento similar a la función nativa ...
  10.  
  11. require_once("Practica/rtf/Rtf.php");
  12. $rtf = new Rtf();
  13. $sect = &$rtf->addSection();
  14. $sect->writeText('<i>Hello <b>World</b></i>.', new Font(12), new ParFormat('center'));
  15.  
  16. $rtf->sendRtf('Hello World');
  17. ?>

... pero no habría necesidad de nada de esto si utilizaras PHP5 ...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"