logo

SYTEME DE DESIGN

Programmez en orienté objet en PHP

Vous connaissez le PHP mais vous avez le sentiment que votre code pourrait être mieux structuré ? C'est qu'il est peut-être temps de passer à la programmation orientée objet, qu'on appelle aussi POO !

La programmation orientée objet, c'est un nouveau moyen de penser votre code. C'est une conception inventée dans les années 1970, qui prend de plus en plus de place aujourd'hui. Ce paradigme permet une organisation plus cohérente de vos projets, une maintenance facilitée et une distribution de votre code plus aisée !

Si vous avez déjà pratiqué d'autres langages apportant la possibilité de programmer orienté objet, c'est un gros plus, surtout si vous savez programmer en Java, car PHP a principalement tiré son modèle objet de ce langage.

PHP : Numéro de téléphone en fonction du pays

copy

Créer l'objet : $phone = new Phone('492 77.41.44','fr');
Retourne le numéro formaté : $phone->format();
Controle pays : $phone->filter();
returne true si le format correspond au pays choisi
returne le pays [fr|us|ca|es] si la langue est vide

class Phone {
		
		private $_num = '';
		private $_lang = 'fr';
		
		
		public function __construct($num = '', $lang = 'fr') {
			
			$this->_num = $num;
			$this->_lang = $lang;
			
		}
		
		public function format() {
			
			// FRANCE
			if ($this->_lang == 'fr' || $this->_lang == "") {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace( array('#^33#', '#^0033#'), '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^0[1-68][0-9]{8}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace( '/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', '\\1 \\2 \\3 \\4 \\5', $this->_num);
					// convertir en numéro = 00 00 00 00 00;
				}
			}
			
			if ($this->_lang == 'fr_FR') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace( array('#^33#', '#^0033#'), '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^0[1-68][0-9]{8}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace('/0(\d)(\d{2})(\d{2})(\d{2})(\d{2})/', '+33 \\1 \\2 \\3 \\4 \\5', $this->_num);
					// convertir en numéro = +33 0 00 00 00 00;					
				}
				if (preg_match('#^[1-68][0-9]{8}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace('/(\d)(\d{2})(\d{2})(\d{2})(\d{2})/', '+33 \\1 \\2 \\3 \\4 \\5', $this->_num);
					// convertir en numéro = +33 0 00 00 00 00;					
				}
			}
			
			// ETAT UNIS
			if ($this->_lang == 'us') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace('#^1#', '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#[0-9]{10}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{3})(\d{4})/', '(\\1) \\2-\\3', $this->_num);
					// convertir en numéro = (000) 000-0000;
				}
			}
			
			if ($this->_lang == 'us_US') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace('#^1#', '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#[0-9]{10}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{3})(\d{4})/', '+1 (\\1) \\2-\\3', $this->_num);
					// convertir en numéro = +1 (000) 000-0000;
				}
			}			
			
			// CANADA
			if ($this->_lang == 'ca') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace('#^1#', '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^[0-9]{10}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{3})(\d{4})/', '\\1 \\2-\\3', $this->_num);
					// convertir en numéro = 000 000-0000;
				}
			}
			
			if ($this->_lang == 'ca_CA') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace('#^1#', '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^[0-9]{10}$#', $this->_num)) { // Si numéro = 0000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{3})(\d{4})/', '+1 \\1 \\2-\\3', $this->_num);
					// convertir en numéro = +1 000 000-0000;					
				}
			}
			
			// ESPAGNE
			if ($this->_lang == 'es') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace( array('#^34#', '#^0034#'), '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^[0-9]{9}$#', $this->_num)) { // Si numéro = 000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{2})(\d{2})(\d{2})/', '\\1 \\2.\\3.\\4', $this->_num);
					// convertir en numéro = 000.00.00.00;
				}
			}
			
			if ($this->_lang == 'es_ES') {
				$this->_num = preg_replace( '#\D#', '', $this->_num); // Vire tout ce qui n'est pas numérique
				$this->_num = preg_replace( array('#^34#', '#^0034#'), '', $this->_num); // Vire l'indicatif en début de chaine
				if (preg_match('#^[0-9]{9}$#', $this->_num)) { // Si numéro = 000000000;
					$this->_num = preg_replace( '/(\d{3})(\d{2})(\d{2})(\d{2})/', '+34 \\1 \\2.\\3.\\4', $this->_num);
					// convertir en numéro = +34 000.00.00.00;
				}
			}				
				
				return $this->_num;
	
		} // fin fonction look()
		
		public function filter() {
			
			// Filtre FRANCE
			if ($this->_lang == 'fr' || $this->_lang == 'fr_FR') {
				if (preg_match('#^0[1-68] \d{2} \d{2} \d{2} \d{2}$|^[\+]33 [1-68] \d{2} \d{2} \d{2} \d{2}$#', $this->_num)) { 
					// Si numéro = 00 00 00 00 00 ou +33 0 00 00 00 00;
					return true;
				} else {
					return false;
				}
			}
			
			// Filtre ETAT UNIS
			if ($this->_lang == 'us' || $this->_lang == 'us_US') {
				if (preg_match('#^\(\d{3}\) \d{3}-\d{4}$|^[\+]1 \(\d{3}\) \d{3}-\d{4}$#', $this->_num)) { 
					// Si numéro = (000) 000-0000 ou +1 (000) 000-0000;
					return true;
				} else {
					return false;
				}
			}
			
			// Filtre CANADA
			if ($this->_lang == 'ca' || $this->_lang == 'ca_CA') {
				if (preg_match('#^\d{3} \d{3}-\d{4}$|^[\+]1 \d{3} \d{3}-\d{4}$#', $this->_num)) { 
					// Si numéro = 000 000-0000 ou +1 000 000-0000;
					return true;
				} else {
					return false;
				}
			}
			
			// Filtre ESPAGNE
			if ($this->_lang == 'es' || $this->_lang == 'es_ES') {
				if (preg_match('#^\d{3} \d{2} \d{2} \d{2}$|^[\+]34 \d{3} \d{2} \d{2} \d{2}$#', $this->_num)) { 
					// Si numéro = 000 00.00.00 ou +34 000 00.00.00;
					return true;
				} else {
					return false;
				}
			}
			
			if ($this->_lang == '') {
				if (preg_match('#^0[1-68] \d{2} \d{2} \d{2} \d{2}$|^[\+]33 [1-68] \d{2} \d{2} \d{2} \d{2}$#', $this->_num)) { 
					// Si numéro = 00 00 00 00 00 ou +33 0 00 00 00 00;
					return 'fr';
				}
				if (preg_match('#^\(\d{3}\) \d{3}-\d{4}$|^[\+]1 \(\d{3}\) \d{3}-\d{4}$#', $this->_num)) { 
					// Si numéro = (000) 000-0000 ou +1 (000) 000-0000;
					return 'us';
				}
				if (preg_match('#^\d{3} \d{3}-\d{4}$|^[\+]1 \d{3} \d{3}-\d{4}$#', $this->_num)) { 
					// Si numéro = 000 000-0000 ou +1 000 000-0000;
					return 'ca';
				}
				if (preg_match('#^\d{3} \d{2}.\d{2}.\d{2}$|^[\+]34 \d{3} \d{2}.\d{2}.\d{2}$#', $this->_num)) { 
					// Si numéro = 000 00.00.00 ou +34 000 00.00.00;
					return 'es';
				}				
			}			
			
		} // fin fonction filter()
		
	}

Cour de POO