Connaissez-vous les différentes manières d’utiliser une fonction callback (ou fonction de rappel en bon français) en paramètre de la fonction usort

Tout le monde connaît la méthode la plus simple qui consiste à donner en paramètre le nom d’une fonction globale, comme montré dans l’exemple suivant:

1
2
3
4
5
function maFonctionCallbackUsort( $a, $b ) {
  return strcmp( $a, $b );
}

usort( $monTableau, 'maFonctionCallbackUsort' );

Un bon petit bout de code qui fait ce qu’on lui demande: il compare deux éléments du tableau et renvoie un résultat indiquant lequel des deux éléments est plus grand que l’autre…

Le problème avec ce morceau de code, c’est qu’on pollue l’espace global de notre application avec une fonction qui ne sera utilisée que pour notre appel à la fonction usort. Ce serait quand-même bien de pouvoir utiliser notre fonction usort dans une classe par exemple, avec une fonction callback privée qui ne serait pas accessible en dehors de la-dite classe (histoire d’éviter justement cette pollution de l’espace global).

Auparavant, lorsque j’avais besoin d’ajouter localement une branche présente sur un dépôt distant, j’utilisais les commandes suivantes:

1
2
git checkout -b nomDeMaBrancheDistante
git pull origin nomDeMaBrancheDistante

Mais…

Quelques mois après la version 3.8, c’est au tour de la version 3.9 de Wordpress de voir officiellement le jour! Un seul plugin a été intégré au noyau de Wordpress, il s’agit du plugin Widgets Customizer.

Quoi de neuf dans cette nouvelle mouture?

Commençons par situer le contexte: Un client me demande d’afficher une carte Google (google maps) dans un iframe (c’est le moyen le plus simple d’intégrer une carte google maps dans un site web). Sur la carte, un marqueur indique l’emplacement de l’adresse de son bureau.

Le site de mon client étant adaptif (mon dieu que ce terme est laid! Responsive design, si vous avez une meilleure traduction, je suis preneur), mon cher et bien aimé client aimerait que le marqueur soit toujours situé en plein milieu de la carte, même après qu’il ait modifé les dimensions de son navigateur, ou après qu’il ait alterné le mode paysage/portrait de sa tablette.

Ajouter des liens vers des fichiers JS et/ou CSS dans le layout est quelque chose d’extrêmement facile dans CakePHP: Par exemple:

1
2
3
4
5
6
7
8
9
10
11
// fichier View/Layouts/default.ctp

echo $this->Html->css( array(
   'bootstrap.min',
));

echo $this->Html->script(array(
   'jquery-1.10.2.min',
   'modernizr',
   'bootstrap.min',
));

Ceci aura pour effet d’ajouter les lignes suivantes dans le rendu HTML:

1
2
3
4
<link rel="stylesheet" type="text/css" href="/3musketeers/Humans-Rights-Report/css/bootstrap.min.css" />
<script type="text/javascript" src="/monsite/js/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="/monsite/js/modernizr.js"></script>
<script type="text/javascript" src="/monsite/js/bootstrap.min.js"></script>

Vu le nombre de sites internet existant, attirer le chaland sur votre site est une tâche difficile. Et comme si ce n’était pas suffisant, une autre tâche, délicate également, est de faire en sorte que votre visiteur s’attarde sur votre site, et s’y intéresse.

Mais quelles sont les raisons qui font que vos visiteurs ne s’attardent pas sur vos pages?

La classe AppModel dans CakePHP possède un nombre conséquent de méthodes intéressantes, cependant il y a une méthode qui n’a pas été implémentée et qui pourtant peut se révéler particulièrement utile dans certains cas. Il s’agit de la méthode truncate().

Pourquoi cette méthode n’est-elle pas implémentée? Sans doute car trop dépendante du système de base de données utilisé? Ou alors parce que les développeurs du framework n’y voient tout simplement aucun intérêt… Aucune idée, mais ce n’est pas vraiment ce qui nous intéresse, n’est-ce pas? Au lieu de se focaliser sur le pourquoi, concentrons-nous donc sur le comment

try-agile

Pour les anglophobes, une traduction imprécise:

Ca y est, La version 3.8 est disponible!

Quoi de neuf dans cette version?

Quels sont les différents moyens de tester en javascript si une variable est définie ou non?

1. Tester la valeur d’une variable

1
2
3
4
var a;
if ( a == undefined ) {
   // ...
}

Problème: undefined est également une variable, ce qui signifie que sa valeur peut être modifiée! Le résultat de la condition peut donc être totalement différent du résultat attendu… Par exemple:

1
2
3
4
var a, undefined = "defined!";
if ( a == undefined ) { // le programme n'exécutera pas le contenu du IF
   // ...
}
1
2
3
4
var a;
if ( a == null ) {
   // ...
}

2. Tester l’existence d’une variable

1
2
3
if ( a == null ) {
   // ...
}

Attention: lance une exception ReferenceError: “a” n’est pas défini

1
2
3
if ( typeof a == "undefined" ) { // si la variable n'a pas été déclarée auparavant
   // ...
}

La méthode la plus sûre je pense…