Programar aplicaciones y crear nuevas tareas obliga a teclear muchos caracteres. A continuación se explica cómo reducir al mínimo imprescindible los caracteres que se teclean.
3.2.1. Eligiendo el IDE
Utilizar un buen IDE ayuda al programador a ser más productivo de muchas formas diferentes.
En primer lugar, los IDE más modernos incluyen autocompletado de código PHP. Esto significa que sólo tienes que escribir las primeras letras del nombre de un método. Además, esto también significa que si no te acuerdas del nombre del método, no hace falta que busques en la API del framework, ya que el IDE muestra la lista de todos los métodos disponibles en ese objeto.
En segundo lugar, algunos IDE como PHPEdit y Netbeans conocen más sobre Symfony y por eso ofrecen una integración mucho más específica con los proyectos Symfony.
3.2.1.1. Utilizando un IDE que soporte Symfony
Algunos IDE como PHPEdit 3.4 y NetBeans 6.8 disponen de soporte nativo de Symfony, por lo que ofrecen una integración muy completa con el framework. No te olvides repasar su documentación para aprender más sobre su soporte de Symfony y sobre cómo pueden ayudarte a programar más rápido.
3.2.1.2. Ayudando al IDE
El autocompletado de código PHP en los IDE sólo funciona con los métodos que
han sido definidos explícitamente en el código. Por tanto, si tu código incluye
métodos mágicos como __call()
o __get()
los IDE no son capaces de
adivinar los métodos y propiedades disponibles para ese objeto. La buena noticia
es que en esos casos puedes ayudar a los IDE definiendo los métodos y/o propiedades
disponibles mediante un bloque de PHPDoc (utilizando las anotaciones @method
y @property
respectivamente).
Imagina que tienes una clase Message
con una propiedad dinámica (message
)
y un método dinámico (getMessage()
). El siguiente código muestra cómo pueden
los IDE saber lo anterior sin ninguna definición explícita en el código PHP:
/**
* @property clob $message
*
* @method clob getMessage() Devuelve el valor del mensaje actual
*/
class Message
{
public function __get()
{
// ...
}
public function __call()
{
// ...
}
}
Aunque el método getMessage()
no existe, el IDE puede reconocerlo gracias a
la anotación @method
. Lo mismo sucede con la propiedad message
debido a la
anotación @property
.
Esta técnica es la que utiliza por ejemplo la tarea doctrine:build-model
.
Si una clase se llama MailMessage
, tiene dos columnas (message
y priority
)
y usa Doctrine, su código PHP es el siguiente:
/**
* BaseMailMessage
*
* This class has been auto-generated by the Doctrine ORM Framework
*
* @property clob $message
* @property integer $priority
*
* @method clob getMessage() Returns the current record's "message" value
* @method integer getPriority() Returns the current record's "priority" value
* @method MailMessage setMessage() Sets the current record's "message" value
* @method MailMessage setPriority() Sets the current record's "priority" value
*
* @package ##PACKAGE##
* @subpackage ##SUBPACKAGE##
* @author ##NAME## <##EMAIL##>
* @version SVN: $Id: Builder.php 6508 2009-10-14 06:28:49Z jwage $
*/
abstract class BaseMailMessage extends sfDoctrineRecord
{
public function setTableDefinition()
{
$this->setTableName('mail_message');
$this->hasColumn('message', 'clob', null, array(
'type' => 'clob',
'notnull' => true,
));
$this->hasColumn('priority', 'integer', null, array(
'type' => 'integer',
));
}
public function setUp()
{
parent::setUp();
$timestampable0 = new Doctrine_Template_Timestampable();
$this->actAs($timestampable0);
}
}