Archives par mot-clé : PHP

Logo Eclipse

Automatically generate PHP get and set using Eclipse

Publié dans PHP | Laisser un commentaire

How to automatically generate PHP getter and setter using Eclipse? There are several possibilities, and no perfect one, but let’s try to list them all:

  • Using Eclipse templates: semi-automatic
    Window > Preferences > PHP > Editor > Templates -> New and use something like this:

    private $$${PropertyName};
    ${cursor}    
    public function get${PropertyName}() 
    {
      return $$this->${PropertyName};
    }
    
    public function set${PropertyName}($$value) 
    {
      $$this->${PropertyName} = $$value;
    }
    

    And then, to use this template type its name and press ctrl+space to generate this code. A context menu should also automatically appear when you type the name.

  • Use the Eclipse PDT plugin E-Surf: automatic, useful but not very clean and their is no way to configure it.
  • Use the Eclipse PDT PHPClassGenerator plugin by IBM to generate automatically classes and accessors: automatic but maybe to complex to configure and use. And it can’t generate getters / setters for attributes that have been added after the class creation.

If you don’t know yet how to install an Eclipse plugin: Let’s work OSGi Virgo on Eclipse (fr).

Humpf… At the moment, their is no perfect solution, and it is a shame! In Java, a simple right clic on a class > Source > Generate get/set or Generate toString… That is why developing in PHP on Eclipse is not yet as easy as developing in Java.

WordPress et les extraits d’articles dans l’affichage par catégories

Publié dans Wordpress | Laisser un commentaire

Dans WordPress, lors de l’affichage des articles par catégories, par défaut, un extrait « à l’arrache » est généré par le système. Et cet extrait n’est pas mis à jour lors de la modification d’un article. Ce qui peut être assez gênant. Pour que les articles s’affichent entièrement, ou seulement un extrait selon la configuration des articles, il est nécessaire d’effectuer une petite modification.
Continuer la lecture

Symfony, Wamp 2.2 et l’extension PHP intl

Publié dans PHP | Un commentaire

Si vous obtenez des erreurs bizarres en utilisant PHP, notamment avec le framework Symfony, et plus particulièrement dans la gestion des formulaires, et d’autant plus si vous utilisez Wamp : c’est peut-être dû à l’extension intl.
Par exemple, une erreur 500 du type :

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\Extension\Core\ChoiceList\MonthChoiceList::__construct() must be an instance of IntlDateFormatter, null given

Signifie peut-être que vous avez activé l’extension PHP intl ! Or, depuis PHP 5.3.0, cette extension est embarquée dans PHP. Auparavant il fallait installer / activer la version PECL de cette extension. Et visiblement, depuis Wamp 2.2, si on active la version PECL de php_intl, ça fait planter quelque chose… sûrement un doublon quelque part.
Conclusion : enlevez php_intl de votre fichier php.ini (ajoutez un point virgule devant cette ligne).

Logo Eclipse

Générer automatiquement getters et setters PHP avec Eclipse PDT

Publié dans PHP objet | Laisser un commentaire

Plusieurs solutions s’offrent à nous :

  • Générer des templates Eclipse : semi-automatique, il y a de la manutention à faire pour chaque variable
  • Utiliser le plugin Eclipse PDT E-Surf : automatique et fonctionnel mais pas très propre (rajoute carrément un menu entre « Run » et « Windows ») et non-configurable
  • Utiliser le plugin Eclipse PDT PHPClassGenerator d’IBM pour générer directement une classe et ses accesseurs : automatique mais (trop ?) compliqué à configurer et utiliser… De plus, a priori, cela ne peut générer des getters/setters pour un attribut rajouté après coup

Si vous ne savez pas (encore) installer un plugin Eclipse, allons donc faire un tour sur ce billet : Let’s work OSGi Virgo on Eclipse.

Bref… il n’existe pas de solutions idéales à l’heure actuelle et c’est bien dommage ! Alors qu’en Java il est possible de faire clic droit > Source > Generate get/set ou Generate toString… Ce sont toutes ces choses qui font que développer en PHP Objet sous Eclipse n’est pas encore aussi facile que de développer en Java.

Bien démarrer (autrement) avec Symfony2

Publié dans PHP | 2 commentaires

Pour peu que vous suiviez un petit peu l’actualité autour de PHP, vous avez sûrement entendu du framework Symfony ! Il faut dire que Symfony a vraiment la cote en ce moment, surtout depuis la sortie de sa version 2. Je réfléchis sérieusement en ce moment à me servir de ce framework pour mes divers projets. J’ai plusieurs idées en tête, et mes réflexions sont les suivantes :

  • je n’ai pas plus le temps de créer tout « à la main » comme j’aimerais pourtant le faire ;
  • je ne veux pas utiliser Joomla (beurk), j’ai peur de me mettre à Drupal, et WordPress bouffe définitivement trop de mémoire pour mon utilisation (et mon serveur mutualisé) ;
  • j’aimerai au moins avoir une structure me permettant de réutiliser facilement des blocs existants ou que j’ai moi même créé.

Le choix intermédiaire me paraît donc d’utiliser un framework PHP pas trop restrictif et performant. Et là il n’y a pas vraiment le choix : Symfony ou Zend. Mais Zend commence à avoir du plomb dans l’aile.

Le vrai but de ce billet est surtout de dire qu’il est possible d’apprendre à utiliser Symfony grâce à sa très bonne documentation : documentation Symfony. Mais que je préfère comprendre les concepts PHP / Web inhérents de ce framework, puis ensuite apprendre à le maîtriser. Et c’est possible ! Fabien Potencier (développer en chef de Symfony) fait actuellement une série intitulée Créer son propre framework à partir des composants de Symfony 2 ! Lecture très intéressante !

Bonne lecture 😉

Understanding the Command Design Pattern » phpmaster

Publié dans Geekeries | Laisser un commentaire

A lire : Understanding the Command Design Pattern par phpmaster, soit en Français : « Comprendre le design pattern Commande en PHP« . Intéressant et utile, même si je trouve que ça ressemble plus à de l’injection de dépendances… Et son exemple est mal choisi ! Jamais je n’irai lire une base de donnée de 200 000 lignes d’un coup ! J’ai déjà essayé : ça ne marche pas 😉

Fatal error: out of memory en mettant à jour WordPress

Publié dans Wordpress | 5 commentaires

Cette erreur lors d’une mise à jour de WordPress a déjà été reporté sur des dizaines de blogs, mais histoire d’être sûr que l’astuce salvatrice soit bien transmise, je vais aussi m’en faire le porte parole !

Quelle est l’erreur ?

En essayant d’installer une nouvelle version de Wordpres, le bien aimé CMS vous sort au bout de quelques instants une erreur du genre : Fatal error: out of memory

Cela signifie que vous n’avez pas assez de mémoire pour faire cette mise en jour ! En partie parce que WordPress est un gros machin, et aussi parce que votre WordPress supporte surement une bonne dose d’extensions, je me trompe ?

Problèmes de mémoire ? Continuer la lecture

Futurs articles sur le thème du développement Web

Publié dans Informations | Laisser un commentaire

Le Web et le développement de sites Web est toujours un de mes passes-temps (le tout reste d’avoir du temps), voici donc quelques sujets que j’aimerai aborder sur ce blog dans un futur proche. On verra ce qu’on peut faire 🙂

  • PHP
    • Doctrine, une librairie permettant de gérer sa base de données comme si l’on avait affaire à des objets. Un ORM quoi ! Elle a l’air très puissante et très utile mais je n’ai pas encore réussi à la prendre en main. Utilisé sous Synfony.
    • Twig, un moteur de template particulièrement efficace et facile à prendre en main. Utilisé sous Synfony.
    • Un exemple de structure MVC (avec des controller et des actions, un petit peu à la mode de Struts), l’idée étant de comprendre ce que font des frameworks comme Zend et Synfony.
  • HTML/CSS
    • Quelques tips HTML5
    • LESS, COMPASS et autre « améliorateur » du développement des CSS

Comment sécuriser les mots de passe de mes utilisateurs ? Le Hashage !

Publié dans Geekeries | 5 commentaires

Aujourd’hui j’ai eu un cours qui m’a permis de comprendre ce que je n’avais jamais compris. Lorsque j’ai appris le PHP, on m’a dit : « il faut chiffrer les mots de passe de tes utilisateurs quand tu les enregistres dans une base de données ! ». Moi, docile, j’ai obéis ! (quoi, on me glisse dans l’oreillette que cela n’a rien à voir avec le chiffrement mais plutôt avec le hachtakage hashage ? Oui bon, on y vient !)
Cela paraît logique :

  • lors de son inscription, l’utilisateur me fournit un mot de passe en clair (appelons-le Mclair),
  • je le chiffre (il devient Mchiffré) et l’enregistre dans ma base de données,
  • lorsque cet utilisateur veut se connecter, il me fournit un mot de passe en clair (appelons-le Tclair), je le chiffre (appelons-le Tchiffré) et teste s’il correspond au mot de passe chiffré de ma base de données (Tchiffré == Mchiffré ?)

Avec ce système, si quelqu’un accède à ma base de données, il ne lui servira à rien de lire les mots de passe de mes utilisateurs puisqu’ils sont sécurisés, il ne pourra donc pas se faire passer pour un de mes utilisateurs. C’est déjà suffisamment embêtant que quelqu’un ait réussi à s’introduire dans ma base de données !

Ce que je n’avais bien capté, c’est ce qui signifie chiffré un message et pourquoi on m’avait encouragé à utilisé la fonction de chiffrage « Md5 » alors que je lisais par ailleurs qu’il valait mieux utiliser « Sha-1 ». Aujourd’hui, je suis un homme nouveau qui voit le monde autrement et qui se couchera accessoirement légèrement moins bête ce soir.
Continuer la lecture

Récapitulatif PHP Objet

Publié dans PHP objet | Laisser un commentaire

Logo PHP

Ce billet vient récapituler la série sur PHP Objet que j’ai effectuée entre mai à juillet 2009. Le but est de faire le point sur PHP Objet, sur mes connaissances et sur les publications réalisés à ce sujet sur 30minparjour. Désormais, j’essayerai de faire un tel résumé pour toutes les séries que j’aborderai. C’est long et fastidieux, mais je pense que cela m’est utile pour faire le point. J’espère que cela vous servira aussi.

Résumons quelques points importants

Petit résumé sur les classes

[abstract ]class MaClasse [extends AutreClasse implements Interface]
{
	public|protected|private [static] $maVariable [= valeur];
	public static $etat = 1;
	
	/**
	 * Constructeur
	*/
	public|protected|private function MaClass|__construct()
	{
		// Déclaration des variables et autres
	}
	
	/**
	 * Fonction classique
	*/
	public|protected|private [static final abstract] function maMethode()
	{
		// Action de la fonction maMethode
		$this--->maVariable = 'test';
		self::$etat = 0;
		$this->autreMethode();
		[parent::autreMethode();]
	}
	public function $autreMethode()
	{
		echo 'Hello world!';
	}
}

Au passage, je rappelle qu’une classe peut implémenter plusieurs interfaces, mais ne peut hériter que d’une seule classe.

Petit résumé sur les interfaces

interface Interface [extends AutreInterface]
{
	/**
	 * Fonction classique
	*/
	public function $maMethode();
	/**
	 * Autre fonction classique
	*/
	public function $autreMethode();
}

Petit résumé sur les singletons

class Singleton
{
	/**
	 * Variable static valant null si la classe n'est pas encore instanciée
	 * ou contenant l'instance si la classe est instanciée.
	 * On y accède avec self::$_instance
	*/
	private static $_instance = null;
	
	/**
	 * Constructeur private inaccessible en dehors de la classe
	*/
	private function __construct()
	{
		// On instancie ce qu'il faut
	}
	
	/**
	 * Accessor static, donc accessible sans être instancié, renvoyant 
	 * l'instance, en la créant si besoin
	*/
	public static function getInstance()
	{
		if (self::$_instance == null) {
			self::$_instance = new Singleton();
		}
		return self::$_instance;
	}
}

Quelques méthodes magiques utiles

  • __construct() : Appelée lorsqu’on tente de construire la class
  • __destruct() : Appelée lorsqu’on tente de détruire la class
  • __set() : Déclenchée lors de l’accès en écriture à une propriété de l’objet. Exemple d’utilisation
  • __get() : Déclenchée lors de l’accès en lecture à une propriété de l’objet. Exemple d’utilisation
  • __call() : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel non static). Exemple d’utilisation
  • __callstatic() : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel static) : disponible depuis PHP 5.3 et 6.0
  • __isset() : Déclenchée si on applique isset() à une propriété de l’objet
  • __unset() : Déclenchée si on applique unset() à une propriété de l’objet -> différence avec __destruct() ?
  • __sleep() : Exécutée si la fonction serialize() est appliquée à l’objet. Exemple d’utilisation
  • __wakeup() : Exécutée si la fonction unserialize() est appliquée à l’objet. Exemple d’utilisation
  • __toString() : Appelée lorsque l’on essaie d’afficher directement l’objet : echo $object;
  • __clone() : Appelé lorsque l’on essaie de cloner l’objet. Exemple d’utilisation

Conclusion

Je crois qu’on vient de faire un tour vraiment rapide mais plus ou moins complet du PHP Objet. A mon sens, il manque 3 notions à ce résumé (mais on ne peut pas tout résumer) :

  • Les exceptions. Il faudrait que je m’y mette un jour. Heureusement il existe un très bon tutoriel sur « Apprendre PHP » : Les exceptions.
  • Un autre chose plutôt cool qu’aborde « Apprendre PHP » est l’interface Iterator, quoi que je ne vois pas trop l’interêt en PHP, mais je sais combien c’est cool en Java !
  • La copie d’une classe. Je l’ai quand même vraiment pas mal résumé ici : Le clônage n’est pas une référence.

Billets traitant de PHP Objet

J’ai trié et classé toutes les publications que j’ai fait sur ce blog à propos du PHP Objet.

Apprentissage

Application

Trucs et astuces

Documentation et tutoriels

Je vous présente les quelques sites que j’ai fréquemment utilisé pour comprendre le fonctionnement et les finesses de PHP et du PHP orienté objet.