Enoncé
Si vous avez déjà codé en Javascript vous aurez certainement vu l'objet
string et les méthodes qui permettent de le manipuler (comme: length, charAt(), indexOf(), substring()...)
L'objectif de cet exercice est de créer une classe PHP au nom de
String qui contient les méthodes du même nom que celles de Javascript et qui font les mêmes tâches. Autrement dit, à l'aide de la classe que vous aurez créé, quelqu'un qui s'y connait en Javascript peut bien traiter les chaines de caractères en PHP même s'il n'a pas de connaissances poussées en ce langage.
Pour récapituler voilà ce que font les méthodes que l'on va créer (Il s'agit d'un extrait du cours de Javascript sur ce site dont voici
le lien):
- length: Cet attribut retourne le nombre de caractères contenus dans la chaîne.
- charAt(): La méthode charAt(x) (avec A majuscule) permet de retourner le caractères qui se trouve à la position x passé en paramètre. Le paramètre est un entier qui commence de 0. La valeur 0 indexe le premier caractère de la chaîne.
- indexOf(): La méthode indexOf(car) (avec O en majuscule) permet de retourner la position du caractères car passé en paramètre. Si le caractère existe dans la chaîne, alors sa position (comprise entre 0 et la longueur de la chaîne - 1) est retournée, sinon (le caractère ne figure pas dans la chaîne) alors la valeur -1 est retournée. La méthode indexOf() peut accueillir un deuxième paramètre qui est un entier qui indique à partir de quel position de la chaîne on commencera la recherche du caractère passé en premier paramètre.
- substring(): La méthode substring(début,fin) permet d'extraire une partie de la chaîne de caractères commençant de la position début et finissant à la position fin-1.
- split(): La méthode split(occurence) permet de retourner un tableau à partir des fractions de la chaîne de caractères obtenues en divisant celle-ci au niveau de l'occurence.
- toLowerCase(): La méthode toLowerCase() permet de retourner la chaîne de caractère entièrement en minuscules.
- toUpperCase(): La méthode toUpperCase() permet de retourner la chaîne de caractère entièrement en majuscules.
Solution
<?php
class String{
private $str;
private $length;
public function __construct($chaine){
$this->str=$chaine;
$this->length=strlen($this->str);
}
public function __toString(){
return $this->str;
}
public function __get($param){
return $this->$param;
}
public function charAt($pos){
return substr($this->str,$pos,1);
}
public function indexOf($car,$pos=0){
$existe="non";
for($i=0;$i<$this->length;$i++){
if(substr($this->str,$i,1)==$car && $i>=$pos){
$existe="oui";
return $i;
}
}
if($existe=="non")
return -1;
}
public function substring($deb,$fin){
return substr($this->str,$deb,$fin-$deb);
}
public function split($occ){
$tab=explode("$occ",$this->str);
return $tab;
}
public function toUpperCase(){
return strtoupper($this->str);
}
public function toLowerCase(){
return strtolower($this->str);
}
}
?>
On va faire un test pour voir si les résultats retournés correspondent à ce que l'on attend:
<?php
$str=new String("Bonjour");
echo $str->length; // Retourne 7
echo $str->charAt(0); // Retourne B
echo $str->indexOf("B"); // Retourne 0
echo $str->indexOf("x"); // Retourne -1
echo $str->indexOf("o",2); // Retourne 4;
echo $str->substring(0,3); // Retourne Bon
print_r($str->split("o")); // Retourne Array([0]=>B[1]=>nj[2]=>ur)
echo $str->toUpperCase(); // Retourne BONJOUR
echo $str->toLowerCase(); // Retourne bonjour
?>
La méthode magique __toString() est là pour retourner la chaîne passée en argument au constructeur au cas où l'utilisateur essaie de traiter l'objet créé en tant que chaîne de caractères.
Exemple:
<?php
$str=new String("Bonjour");
echo $str; // Retourne Bonjour
?>