¿Es malo usar html dentro de una clase php?

¿Hay algo de malo en usar html dentro de una función de clase? Lo llamo en el DOM, así que no necesito que me devuelvan una cadena.

public function the_contact_table(){
    ?>
    <div>
        some html here
    </div>
    <?php
}

¿También cuando necesito la cadena utilizo este método? ¿Hay una mejor manera o es esto relativamente estándar?

public function get_single(){
    ob_start();?>
        <div class='staff-member single'>
            <div class='col left'>
                <div class='thumbnail'>
                    thumbnail
                </div>
                <?php $this->the_contact_table(); ?>
            </div>
            <div class='col right'>

            </div>
        </div>      
    <?php
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

ACTUALIZACIÓN

Debería haber explicado por qué estoy haciendo esto. Estoy creando un complemento de Wordpress y quiero controlar la salida de un tipo de publicación. Así que estoy usando un filtro como el de abajo

public function filter_single($content){
     global $post;
     if ($post->post_type == 'staff-member') {

         $sm = new JM_Staff_Member($post);
         $content = $sm->get_single();
     }
     return $content;
}

Así que como puedes ver, yo debe: devolver una cadena al núcleo de wordpress

preguntado el 29 de julio de 12 a las 06:07

PHP necesita trabajar más, manteniéndolo fuera de la clase renderiza HTML más rápidamente.. -

Investigar ZF si desea aprender a separar sus vistas, modelos y controladores. -

Desafortunadamente, este es un complemento de Wordpress, sin embargo, uso Zend en el trabajo:

3 Respuestas

Deberías estar usando HEREDOC en lugar del almacenamiento en búfer de salida si desea almacenar una cadena larga en una variable. Se parece a esto:

$content = <<<EOD
content here
EOD;

EOD puede ser cualquier cosa, pero tenga en cuenta dos cosas importantes:

  1. No puede tener ningún espacio en blanco delante y debe estar en su propia línea.
  2. No debería ser una cadena que se pueda encontrar dentro de su contenido.

Si está utilizando PHP> = 5.3, entonces debe usar NOWDOC, que no analiza la variable dentro del documento (a menos que lo necesite). La única diferencia con la sintaxis de NOWDOC es que el centinela está entre comillas:

$content = <<<'EOD'
content here
EOD;

La razón por la que me alejaría del almacenamiento en búfer de salida es que evita que el servidor fragmente los datos enviados al cliente. Esto significa que las solicitudes parecerán más lentas porque en lugar de que el contenido se envíe progresivamente al cliente y se muestre, se fuerza que se envíe todo a la vez. El almacenamiento en búfer de salida es un truco para situaciones en las que funciona sin cuidado echo datos en lugar de devolverlos o una herramienta para determinadas aplicaciones con la necesidad específica de ello. También me imagino que tendría un impacto en el tiempo de ejecución si usara el almacenamiento en búfer de salida (porque implica llamadas a funciones) en lugar de HEREDOCing la cadena en una variable o incluyendo una vista.

Ahora, para responder a la pregunta de si es apropiado, diría que en una aplicación MVC todo el HTML y otros contenidos deben estar dentro de su propia vista. Luego, un controlador puede llamar a una vista para mostrarse y no tiene que preocuparse por conocer el código involucrado en la visualización de la vista. Todavía puede pasar información (como títulos, autores, matrices de etiquetas, etc.) a las vistas, pero el objetivo aquí es separar el contenido de la lógica.

Dicho esto, las plantillas y el código de Wordpress se ven bastante descuidados para empezar y, en general, implementa MVC, por lo que si es demasiado trabajo crear una vista para esto, diría que el descuido encajaría con el estilo de WP.

Respondido 29 Jul 12, 07:07

Ok, ¿cuál es la desventaja de usar el almacenamiento en búfer de salida? - JackMahoney

@JackMahoney Actualizado para ilustrar la desventaja de OB. - bailey parker

gracias por el consejo. Estoy de acuerdo en que Wordpress puede ensuciarse. Necesito devolverlo como una cadena, así que supongo que heredoc podría ser la mejor solución. Otros han mencionado separar la vista del controlador, pero eso requeriría usar output_buffering ya que debo devolver una cadena: JackMahoney

Actualicé mi respuesta, olvidé mostrar que la función en realidad devuelve una cadena. - Antera

@Anther No necesita comentar mi respuesta para llamar la atención de Jack Mahoney. Dado que comentó su respuesta, si publica un comentario en su respuesta, verá una notificación. - bailey parker

No es una buena práctica con respecto al hecho de que aliena a los desarrolladores front-end al colocar lo que en realidad son "Vistas" dentro de los archivos de clase de PHP. Este fue uno de mis mayores problemas cuando comencé a usar PHP en general, es que quería crear contenido de forma dinámica dentro de las clases. Es una gran idea, pero desea hacerlo de una manera que permita que muchos miembros de su equipo trabajen juntos de la mejor manera posible ;].

Probablemente debería tener el contenido dentro de un archivo separado llamado "staff-member-single.php", que luego llama en su función

public function get_single(){
    ob_start();
    require_once('views/staff-member-single.php');
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

Sin embargo, normalmente lo refactorizaría en un método reutilizable, por lo que se vería un poco como ...

public function get_single()
{
    $string = $this->render_view_as_string('satff-member-single');
    return $string;
}

public function render_view($view)
{
    require('views/'.$view.'.php');
}

public function render_view_as_string($view)
{
    ob_start();
    $this->render_view($view);
    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

Respondido 29 Jul 12, 07:07

actualicé la pregunta para mostrar la aplicación, gracias por su ayuda hasta ahora - JackMahoney

Edité mi respuesta para mostrar realmente el get_single() Función que devuelve una cadena. La declaración de devolución faltaba en mi código, pero aún debería ajustarse a su ejemplo, ya que cuando usa require, el archivo de vista aún tendrá acceso a todas las variables de la clase como si todavía estuviera dentro de la clase. - Antera

Gracias, me gusta esta solución. También aprecio su punto sobre trabajar en equipo, ya que soy un desarrollador front-end de día. JackMahoney

Creo que es una buena práctica usar PHP solo para la lógica de la aplicación y la transmisión de algunos datos para ver la capa (motor de plantilla). De acuerdo con esto, existen algunos patrones como MVC.

Respondido 29 Jul 12, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.