Introducción
Youve oído hablar de "
Métodos mágicos "Si hay algo que hacer en absoluto con el youve [sigla = Programación Orientada a Objetos: 3uv30xo7] Programación Orientada a Objetos [/acronym] en [sigla = Hypertext PreProcessor: 3uv30xo7] PHP [/acronym] . Lo más probable es la __construct (), que se invoca cuando se inicializa una instancia de una clase youve definido.
Mientras __construct () es un método mágico no oficial que se requiere para definir al escribir clases, __toString () es opcional en todos los sentidos de la palabra y es a menudo pasado por alto en favor de los métodos de escritura diseñado para ser invocado por la única razón de devolver un cadena legible por humanos.
No hay nada de malo hacerlo, pero si usted puede conseguir los objetos para devolver una cadena humana de lectura sin necesidad de escribir algo más que la suma de "objeto" de referencia en lugar de "$ objeto-> metodo ()", ¿por qué no hacer que haga que?
Los conceptos de este tutorial se aplican a [sigla = Hypertext PreProcessor: 3uv30xo7] PHP [/acronym] la versión 5.2 o posterior. Debido a las limitaciones en el contexto que: 3uv30xo7 [sigla = Hypertext PreProcessor] PHP [/acronym] invoca el método mágico __toString antes de [sigla = Hypertext PreProcessor: 3uv30xo7] PHP [/acronym] 5.2, los ejemplos contenidos en este tutorial no pueden trabajar en las versiones anteriores.
Ejemplos de uso de
Permite comparar un ejemplo utilizando tanto la práctica común, y el uso de __toString.
Primero un ejemplo usando una práctica común para cargar un archivo CSV e imprimirlo como una = [sigla Hyper Text Markup Language: 3uv30xo7] HTML [/acronym] <table>.
<?php
$data_table = new csv_html('file.csv');
echo '<h2>Data Table</h2>' . $data_table->html_table();
?>
- <?php
-
- $data_table = new csv_html('file.csv');
- echo '<h2>Data Table</h2>' . $data_table->html_table();
-
- ?>
Ahora veamos el mismo ejemplo, si __toString se había definido en lugar de la "html_table ()" método.
<?php
$data_table = new csv_html('file.csv');
echo "<h2>Data Table</h2>$data_table";
?>
- <?php
-
- $data_table = new csv_html('file.csv');
- echo "<h2>Data Table</h2>$data_table";
-
- ?>
Un ejemplo más útil de instancias puede ser anónima, donde se conserva ninguna referencia al objeto. Esto es útil cuando un objeto es un formateador simple y probablemente nunca se puede manipular después de instancias.
<?php
printf('<h2>Data Table</h2>%s', new csv_html('file.csv'));
?>
- <?php
-
- printf('<h2>Data Table</h2>%s', new csv_html('file.csv'));
-
- ?>
Así que ¿Cómo puedo __toString Implementar y #40; y #41;?
Exactamente de la misma manera a definir su __construct () el método, y cualquiera de los otros métodos de la magia, con la excepción de __autoload ().
Como
público método dentro de su definición de clase.
Aquí está un ejemplo, aunque sea crudo, de cómo la clase en el ejemplo CSV puede ser escrito.
<?php
class csv_html
{
public $filename, $csv;
public function __construct($filename)
{
$this->filename = $filename;
$this->csv = file_get_contents($filename);
return $this;
}
public function __toString()
{
return sprintf(
'<table><tr><td>%s</td></tr></table>',
str_replace(array("\n", ','), array('</tr><tr>', '</td><td>'), $this->csv)
);
}
}
?>
- <?php
-
- class csv_html
- {
- public $filename, $csv;
- public function __construct($filename)
- {
- $this->filename = $filename;
- $this->csv = file_get_contents($filename);
- return $this;
- }
- public function __toString()
- {
- return sprintf(
- '<table><tr><td>%s</td></tr></table>',
- str_replace(array("\n", ','), array('</tr><tr>', '</td><td>'), $this->csv)
- );
- }
- }
-
- ?>
Ahora usted puede preguntar, "
¿Por qué no tienen el constructor de devolver el = [sigla Hyper Text Markup Language: 3uv30xo7] HTML [/acronym] ? ".
Porque haría lo que se convertirá en su pare constructor de la clase no sirve de nada si alguna vez trató de extender la clase, por eso.
Conclusión
Dar __toString () un intento, apenas puede ser como él.
Strong with this one, the sudo is.