Vous devez vous connectez pour ajouter un tuto

src/docs/doc_20181003163624_1331383777.jpg

src/docs/doc_20181003163624_1331383777.jpg

3%
Vues :jpg
Je vote

src/docs/doc_20181003163607_1775752362.jpg

src/docs/doc_20181003163607_1775752362.jpg

3%
Vues :jpg
Je vote

src/docs/doc_20181003162706_1169163235.

src/docs/doc_20181003162706_1169163235.

3%
Vues :
Je vote

src/docs/doc_20181003162246_1360960594.

src/docs/doc_20181003162246_1360960594.

3%
Vues :
Je vote

/src/docs/doc_20180611101414_11527913329.pdf

/src/docs/doc_20180611101414_11527913329.pdf

3%
Vues :pdf
Je vote

src/docs/doc_20181004101740_1165441429.pdf

src/docs/doc_20181004101740_1165441429.pdf

3%
Vues :pdf
Je vote

src/docs/doc_20181004101740_2165441429.pdf

src/docs/doc_20181004101740_2165441429.pdf

3%
Vues :pdf
Je vote

src/docs/doc_20181004134725_1785668335.jpg

src/docs/doc_20181004134725_1785668335.jpg

3%
Vues :jpg
Je vote

src/docs/doc_20181004134908_1352937368.jpg

src/docs/doc_20181004134908_1352937368.jpg

3%
Vues :jpg
Je vote

src/docs/doc_20181004135024_1563091436.jpg

src/docs/doc_20181004135024_1563091436.jpg

3%
Vues :jpg
Je vote

/src/docs/doc_20180603074905_13472176332.pdf

/src/docs/doc_20180603074905_13472176332.pdf

3%
Vues :pdf
Je vote

/src/docs/doc_20180603144255_19035234592.pdf

/src/docs/doc_20180603144255_19035234592.pdf

3%
Vues :pdf
Je vote

/src/docs/doc_20180606161814_17624882509.pdf

/src/docs/doc_20180606161814_17624882509.pdf

3%
Vues :pdf
Je vote

/docs/files/book_20170415140006.pdf

/docs/files/book_20170415140006.pdf

3%
Vues :pdf
Je vote

3%
Vues :wdu
Je vote

INTRODUCTION

QU'EST-CE QUE NODE.JS ?

Node.js est un serveur utilisant comme language principal le Javascript.

QUEL EST L'INTÉRÊT D'UTILISER NODE.JS ?

Node.js permet à la fois de servir des pages HTML classiques et d'exécuter du code en temps réel. Cela permet d'établir des connexions directes avec les clients, et ainsi d'exécuter des commandes en temps réel.

OBJECTIF DU TUTORIEL

Nous allons réaliser un mini-chat, afin de discuter librement durant nos cours !

ÉTAPES

  • Serveur de base node.js
  • Page HTML de base
  • Connexion socket

SERVEUR DE BASE

TÉLÉCHARGEMENT

Pour cette étape, téléchargez l'installateur sur le site de node.js (http://nodejs.org/) ou la version portable sur le lien http://imsky.co/files/nodejs-0.8.18.zip puis extrayez l'archive.
Votre installation devrait ressembler à ceci :

INSTALLATION DES PLUGINS

Créez un fichier install.bat puis insérez les lignes suivantes dedans :
npm install express
npm install socket.io
Éxecutez-le.
Félicitations, vous venez d'installer 2 plugins !

LANCEMENT

Le fichier "node.cmd" servira à lancer votre serveur. Éditez-le et ajoutez :
@echo off
set PATH=%PATH%;�%
set NODE_PATH=�%\node_modules\npm\node_modules;�%\node_modules\npm
node app.js
cmd
puis créez le fichier app.js dans le même répertoire.

SERVEUR DE BASE

Dans le fichier app.js, insérez les lignes suivantes :
var express = require('express'),
app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);
// listen for new web clients:
server.listen(80);
// Routage
app.get('/', function (req, res) {
res.sendfile(__dirname '/index.html');
});

PAGE HTML SIMPLE

PAS MAL SIMPLE MÊME

Maintenant que vous avez un beau serveur, il est temps de créer une page !
Créez un fichier index.html et écrivez dedans ce que vous souhaitez. Exécutez node.cmd puis rendez vous à l'adresse 127.0.0.1 dans votre navigateur favoris (de préférence Chrome) !
Vous devriez obtenir un résultat similaire au suivant :

UNE PAGE UN PEU MOINS SIMPLE

Maintenant que notre serveur fonctionne, il est temps de s'occuper du côté client. Tout d'abord, faites-vous une jolie petite interface semblable à celle-ci :
Utilisateurs

CONNEXION SOCKET

Maintenant que votre interface est faite, rajoutez-y un peu de Javascript. Tout d'abord, nous devons nous connecter au serveur.
var ip = window.location.hostname;
var socket = io.connect(ip);
Ensuite, nous ajoutons un écouteur sur l'évènement 'connect', qui signifie une connexion établie avec le serveur.
//Lors de la connexion avec le serveur, ceci est executé
socket.on('connect', function(){
//On demande à l'utilisateur son pseudo afin de l'envoyer au serveur
socket.emit('adduser', prompt("Quel est votre pseudo?"));
});
Puis on ajoute les écouteurs d'actualisation des utilisateurs et du chat.
//Lorsque le serveur envoie des données via 'updatechat', on rafrachit les données affichées à l'utilisateur.
socket.on('updatechat', function (username, data) {
' username ':
});
//Lorsque le serveur envoie un 'updateusers', on raffraichi la liste des utilisateurs affichée à l'utilisateur.
socket.on('updateusers', function(data) {
$('#users').empty();
$.each(data, function(key, value) {
$('#users').append('
' key '
');
});
});
Et finalement on ajoute les contrôles utilisateur.
//Lors du chargement de la page (jQuery de base)
$(function(){
//On fait un focus sur le champ de texte
$('#data').focus();
//On affiche l'IP du serveur
$('#ip').append('IP : ' ip);
//Lorsque l'on clique sur Envoyer
$('#datasend').click( function() {
var message = $('#data').val();
$('#data').val('');
//On envoie la commande 'sendchat' avec comme contenu le message
socket.emit('sendchat', message);
});
//Lorsque l'utilisateur appuie sur Enter
$('#data').keypress(function(e) {
if(e.which == 13) {
$(this).blur();
$('#datasend').focus().click();
$('#data').focus();
}
});
});
Maintenant, lancez votre serveur puis rendez-vous sur 127.0.0.1, votre application est prête !

FIN DE LA PRÉSENTATION

.png" />

3%
Vues :wdu
Je vote

/docs/files/doc_20150414113651.pdf

/docs/files/doc_20150414113651.pdf

3%
Vues :pdf
Je vote

/docs/files/doc_20141214232641.docx

/docs/files/doc_20141214232641.docx

3%
Vues :docx
Je vote

3%
Vues :wdu
Je vote

/docs/files/doc_20141123152332.pdf

/docs/files/doc_20141123152332.pdf

3%
Vues :pdf
Je vote

/docs/files/tuto_2147483647.pdf

/docs/files/tuto_2147483647.pdf

3%
Vues :pdf
Je vote

/docs/files/tuto_2147483647.pdf

/docs/files/tuto_2147483647.pdf

3%
Vues :pdf
Je vote

http://orbi.ulg.ac.be/handle/2268/135775?locale=fr

http://orbi.ulg.ac.be/handle/2268/135775?locale=fr

3%
Vues :web
Je vote

http://www.lephpfacile.com/cours/

http://www.lephpfacile.com/cours/

3%
Vues :web
Je vote

http://www.google.com/patents?hl=fr&lr=&vid=USPATAPP12469444&id=NarIAAAAEBAJ&oi=fnd&dq=Policy+and+Charging+Control&printsec=abstract#v=onepage&q=Policy%20and%20Charging%20Control&f=false

http://www.google.com/patents?hl=fr&lr=&vid=USPATAPP12469444&id=NarIAAAAEBAJ&oi=fnd&dq=Policy+and+Charging+Control&printsec=abstract#v=onepage&q=Policy%20and%20Charging%20Control&f=false

3%
Vues :web
Je vote

/docs/wdu/mise-en-place-dun-systeeme-de-communication-unifieee_2

/docs/wdu/mise-en-place-dun-systeeme-de-communication-unifieee_2

3%
Vues :wdu
Je vote

/docs/wdu/systeemes-embarquees

/docs/wdu/systeemes-embarquees

3%
Vues :wdu
Je vote

https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxleGFtZW5zaW5mb3JtYXRpcXVlZnN0fGd4OjIyY2JkMTI3OWNmZjJmMmI

https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxleGFtZW5zaW5mb3JtYXRpcXVlZnN0fGd4OjIyY2JkMTI3OWNmZjJmMmI

3%
Vues :web
Je vote

http://www.freelang.com/dictionnaire/index.php

http://www.freelang.com/dictionnaire/index.php

3%
Vues :web
Je vote

http://www.jmdoudoux.fr/java/dej/indexavecframes.htm

http://www.jmdoudoux.fr/java/dej/indexavecframes.htm

3%
Vues :web
Je vote

/docs/files/eclipsme.pdf

/docs/files/eclipsme.pdf

3%
Vues :pdf
Je vote

/docs/files/j2me.pdf

/docs/files/j2me.pdf

3%
Vues :pdf
Je vote

https://www.google.sn/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.coursbardon-microsoftoffice.fr%2Fcoursword2010.pdf&ei=MAKZUeLvJcaYPb_qgQg&usg=AFQjCNGhZsKWbzhkXS467ls0CpPDjZ8y-Q&bvm=bv.46751780,d.ZWU

https://www.google.sn/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.coursbardon-microsoftoffice.fr%2Fcoursword2010.pdf&ei=MAKZUeLvJcaYPb_qgQg&usg=AFQjCNGhZsKWbzhkXS467ls0CpPDjZ8y-Q&bvm=bv.46751780,d.ZWU

3%
Vues :pdf
Je vote

/docs/files/crs_2147483647pdf

/docs/files/crs_2147483647pdf

3%
Vues :pdf
Je vote

I - Installation des librairies et utilitaires necessaires

apt-get install gcc
apt-get install libxml2-devel
apt-get install wvdial

Connectez votre modem à l'ordinateur et vérifier que celui-ci est synchronisé en tapant la commande suiante :

wvdialconf

Cette commande va scanner les ports séries de l'ordinateur et trouver les modems connectés, vous aurez alors si

tout va bien une sortie du genre :

Scanning your serial ports for a modem.
Modem Port Scan<*1>: S0 S1 S2 S3
WvModem<*1>: Cannot get information for serial port.
ttyUSB0<*1>: ATQ0 V1 E1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 EC1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0 -- OK
ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB0<*1>: Speed 9600: AT -- OK
ttyUSB0<*1>: Max speed is 9600; that should be safe.
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0 -- OK
WvModem<*1>: Cannot get information for serial port.

ttyUSB1<*1>: ATQ0 V1 E1 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 EC1 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0 -- OK
ttyUSB1<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB1<*1>: Speed 9600: AT -- OK
ttyUSB1<*1>: Max speed is 9600; that should be safe.
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0 -- OK

Found a modem on /dev/ttyUSB0.
Modem configuration written to /etc/wvdial.conf.
ttyUSB0: Speed 9600; init "ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0"
ttyUSB1: Speed 9600; init "ATQ0 V1 E1 S0=0 EC1 ED2 FCLASS=0"

La sortie peut-être différente selon le type de modem que vous utilisez.

Les informations sont stockées dans /etc/wvdial.conf

II - Installation de Kannel

apt-get install kannel

III - Configuration de Kannel

Editez le fichier de configuration de kannel

nano /etc/kannel.conf

#Core Kannel Configuration Section
group = core
admin-port = 13001
admin-password = kannel
status-password = kannel
admin-allow-ip = "*.*.*.*"
wapbox-port = 13004
smsbox-port = 13002
log-file = "/var/log/kannel/bearerbox.log"
access-log = "/var/log/kannel/bearerbox-access.log"
log-level = 1
unified-prefix = "00221, 221,00"
#Wapbox
group = wapbox
bearerbox-host = localhost
log-file = "/var/log/kannel/wapbox.log"
#Smsbox
group = smsbox
bearerbox-host = localhost
sendsms-port = 14000
sendsms-url = "/cgi-bin/sendsms"
sendsms-chars = "0123456789 -"
global-sender = 221781604207
log-level = 0
log-file = "/var/log/kannel/smsbox.log"
access-log = "/var/log/kannel/smsbox-access.log"
#Smsc
group = smsc
smsc = at
smsc-id = Huawei-E1552
modemtype = huawei_e1552
device = /dev/ttyUSB0 // A remplacer le port logique sur lequel écoute votre modem, la commande wvdialconf vous le donne
host = localhost
sms-center = 221776380010 // A remplacer par le centre de messagerie de votre opérateur
my-number = 221781604207 // A remplacer par le numéro de la puce que vous utilisez avec le modem
pin = 0000
keepalive = 10
speed = 9600
sim-buffering = true
#Modems
group = modems
id = huawei_e1552
name = "huawei E1552"
detect-string = "Huawei"
init-string ="AT CNMI=2,1,2,2,0"
message-storage = "ME"
speed = 9600
#Sms Service Informations
group = sms-service
accepted-smsc = Huawei-E1552
keyword = info
catch-all = true
get-url = http://localhost/info.php?t=%tEq=%qEa=%a
#Sms Service test
group = sms-service
accepted-smsc = Huawei-E1552
keyword = test
catch-all = true
text="Configuration de kannel reussie. Bravo !!!"
#Sendsms
group = sendsms-user
username = kannel
password = kannel
forced-smsc = huawei-E1552
user-allow-ip = "*.*.*.*"

Il faut pensez à adapter les deux blocs smsc et modems à votre cas; les informations correspondant vous sont fourni par la commande wvdialconf.

IV - Démarrer la passerelle Kannel

Pour demarrer kannel, en ligne de commande vous devez taper :

bearerbox -v 0 /etc/kannel/kannel.conf

Vous devez voir un message du genre AT SMSC successfully opened en dernière position.

Vous pourrez souvent rencontrer cette erreur :

2013-09-27 00:36:18 [4616] [0] INFO: HTTP: Opening server at port 13001.
2013-09-27
00:36:18 [4616] [0] ERROR: bind failed
2013-09-27
00:36:18 [4616] [0] ERROR: System error 98: Address already in use
2013-09-27 00:36:18 [4616] [0] ERROR: Couldn't bind a UDP socket to port 9200

Comme indiquer sur le message d'erreur, il s'agit d'un problème de port. Il faudra dans ce cas changer le numéro de port (ici 13001) et démarrer à nouveau le bearerbox.

Une fois que vous avez la confirmation que le bearerbox est bien démarré, dans un autre terminal, lancez la commande suivante :

smsbox -v 0 /etc/kannel/kannel.conf

V - Tester l'envoi d'un SMS

Pour tester l'envoi de SMS, veuillez taper ceci depuis votre navigateur :

http://localhost:14000/cgi-bin/sendsms?username=nom_d_utilisateurEpassword=mot_de_passeEfrom=votre_numeroEto=destinationEtext=contenu_du_message

Remplacer votre_numero par celui de la puce que vous utiliser avec le modem.

Vous devez voir le message 0: Accepted for delivery

VI - Aller plus loin

Vous pouvez installer playSMS et le coupler avec kannel afin de pouvoir gérer votre passerel via le navigateur; vous n'aurez plus besoin d'ouvrir les fichiers de configuration de kannel pour ajouter de nouveaux services, tout se fera par l'interface web de playSMS.

.png" />
/docs/wdu/installer-et-configurer-passerelle-sms-avec-kannel

/docs/wdu/installer-et-configurer-passerelle-sms-avec-kannel

3%
Vues :wdu
Je vote

/docs/wdu/premier-pas-avec-javafx_5

/docs/wdu/premier-pas-avec-javafx_5

3%
Vues :wdu
Je vote

/docs/files/crs_2147483647pdf

/docs/files/crs_2147483647pdf

3%
Vues :pdf
Je vote

http://www.touilleur-express.fr/2006/03/28/struts-shale-ne-sera-pas-struts-2/

http://www.touilleur-express.fr/2006/03/28/struts-shale-ne-sera-pas-struts-2/

3%
Vues :web
Je vote

/docs/files/crs_2147483647doc

/docs/files/crs_2147483647doc

3%
Vues :doc
Je vote

/docs/wdu/faire-interagir-une-page-php-avec-asterisk

/docs/wdu/faire-interagir-une-page-php-avec-asterisk

3%
Vues :wdu
Je vote

Classe, attribut, méthode, constructeuren haut
spacer
* PHP n’est pas un langage orienté objet mais il permet, dans une certaine mesure, la géstion des objets.
* PHP supporte la notion d’héritage et permet donc la construction d'une hiérarchie de classes et l’introduction du polymorphisme.
* PHP, dans le concept d’encapsulation, permet de définir un seul niveau de visibilité des éléments de la classe :publique.
spacer

La déclaration d'une classe se fait par l'utilisation du mot clé class, suivit du nom de la classe. A partir de ce point, le moteur PHP sait que des objets de type user (voir le code) pourront être intentés et il sera capable de leur allouer un emplacement mémoire.

spacer
classe



class user {

// propriétés

// var Déclaration des variables
var $name;
var $password;
var $last_login;


// méthodes

// constructeur
function user ($inputName, $inputPassword) {
$this->name = $inputName;
$this->password = $inputPassword;
$this->last_login = time();

}

// méthode d'accès
// lire la date de la dérnière connexion
function getLastLogin() {
return (Date("M d Y", $this->last_login));

}
}

spacer
spacer
Propriété (attribut ou variable)
spacer
spacer
- Les attributs sont des sortes de variables internes à l'objet qui ne sont accessibles qu'à travers celui-ci.
spacer
- La déclaration d'un attribut au sein d'une classe se fait par l'utilisation du mot clé var suivi du nom de l'attribut. (PHP ne nécessite pas de déclaration préalable des variables, mais, dans la cadre d'une classe, il est préférable de la faire.)
spacer
- Quand vous déclarez une propriété, vous ne spécifiez aucun type de donnée. Elle pourra contenir, par exemple, un entier, chaîne de caractères, un autre objet.
spacer
Méthode (fonction)
spacer
- Les méthodes quant à elles, sont des fonctions internes à l'objet qui vont permette d'agir sur les attributs de l'objet.
spacer
- La déclaration d'une méthode (ou fonction) à l'intérieur d'une classe se fait de la même façon que dans un script classique. On utilise pour cela le mot réservé function suivi du nom de la méthode.
spacer
- Si la méthode requiert des paramètres, on les indiquera entre parenthèses. En PHP il n'est pas nécessaire de spécifier le type de retour de la fonction.
spacer
Une méthode particulière, le constructeur de la classe, est automatiquement appelée lors de la création d'un objet (instanciation de la classe).Cette méthode permet d'initialiser l'objet à sa création en donnant par exemple des valeurs à chacun de ses attributs. Le constructeur d'une classe est donc une méthode qui porte le même nom que la classe dont elle est le constructeur.
spacer
spacer
spacer
Les méthodes disposent d'une variable spéciale, this (suivi de l'opérateur -> qui référence une classe, une mèthode ou une propriété d'une classe), qui contient l'objet ou l'instance courante. Il faut utiliser cette variable chaque fois qu'on veut nous référer à une propriété ou à une méthode de l'objet. PHP supposera qu'il s'agit d'une variable locale (voir l'usage de this au sein du constructeur de la classe user et la fonction d'affichage getLastLogin).

Instanciation, accéder aux propriétés et aux méthodesen haut

spacer
La création d'un objet à partir d'une classe, s'appelle l'instanciation (un objet étant alors appelé instance d'une classe).
La création d'un objet permet plusieurs choses:
- La création d'un espace mémoire est réservé pour recevoir toutes les propriétés durant son utilisation
- L'atribution d'un nom à l'objet.
- En appelant le constructeur, cet objet sera initialisé (avec des valeurs par défaut ou des valeurs passées en paramètres).
- Chaque instance possède son propre jeu de propriétés, mais ses méthodes sont communes à toutes les instances de cette classe.
spacer
Pour la création d'un objet à partir d'une classe il y a quatre manière de générer l'objet:
spacer
2. Copier un objet par un simple jeu des variables (dans l'exemple ci-dessous $obj2contient une copie, une nouvelle instance, susceptible de vivre sa propre vie en n'utilisant pas le constructeur de la classe user).
spacer
4. La dernière manière de générer l'objet est par la transformation (casting) d'un tableau associatif. Lorsqu'un tableau devient un objet, $obj4 , tous les éléments du tableau indexés par une chaîne de caractères deviennent des propriétés (en cas d'indexés par chaîne vide ils sont cachés pour l'objets).
spacer
spacer
spacer
exemple1



// création d'une instance par le mot new

$currentuser = new user ("Dorel", "staf2x");

// création d'une nouvelle instance par copy

$obj2 = $currentuser;
$obj2 -> commentaire = "ajoutons une propriété";

// création d'une nouvelle instance par inférence

$obj3 -> age = 25;
$obj3 -> poids= 75;

// création d'une nouvelle instance par casting

$arr['nom'] = "Jean";
$arr['pays'] = "Suisse";
$obj4 = (object) $arr;
print ($obj4->nom); // affiche la propriété nom

// imprimer la date

print ($currentuser->getLastLogin());

// imprimer le nom

print ($currentuser->name);
print ("
\n");

spacer
spacer
Le propriétés d'une instance correspondent à des variables identiques à toutes celles que nous avons vues jusqu'à présent.
spacer
- Pour accéder aux propriétés il faut utiliser l'opérateur ->
spacer
- Si un propriété d'objet est elle-même un objet on peut utiliser deux fois l'opérateur ->dans la même instruction (seulement avec la version PHP4)
spacer
- Á la différence des langages orientés objet (Java, C ) les membres (propriétés et méthodes) des classes PHP ne peuvent être déclarées protected, private ou public (c'est à dire que n'importe quelle partie du script on peut y accéder pour lire ou modifier les valeurs qu'elles contient).
spacer
L'accès aux méthodes est semblable à l'accès aux propriétés
spacer
- L'opérateur -> est utilisé pour indiquer sur quelle instance doit porter la méthode (par exemple l'expression $currentuser->getLastLogin()).
spacer
- Pour ce qui reste, les méthodes se comportent exactement comme des fonctions ordinaires.
spacer
spacer
exemple 2

//Objet composé d'autres objets

class chambre {
var $nom;
function chambre ($nom){

//pas de conflit entre les deux "nom"
$this->nom=$nom;
}
}

class maison
{

//une liste des chambres
var $chambres;
}


// créer une maison vide
$home = new maison();

// ajouter des chambres
$home->chambres[] = new chambre (chambre de JJ);
$home->chambres[] = new chambre (chambre de Stek);
$home->chambres[] = new chambre (salle de bains);


// montrer le nom de la première chambre
print($home->chambres[0]); // on affiche: "chambre de JJ"

spacer
spacer

Héritageen haut

spacer
spacer
spacer
Le principal apport de la programmation objet est certainement de faciliter la réutilisation (reusability) de modules, en occurrence des objets. Les deux techniques utilisées sont, l'héritage et la composition (un exemple simplifié de composition dans l'exemple 2, en haut).
Ecrire une classe spécialisée à partir d'une classe générale est le meilleur moyen de réutiliser ce code déjà produit.
Cette procédure s'appelle héritage et elle est introduite par le mot clé extends.
spacer
spacer
exemple3
//


class myclass {
var $myvar;
function myclass($myparameter) {
$this->myvar = $myparameter;
}

function afficher() {
echo "myvar vaut : $this->myvar";
}
}




p




class myclass2 extends myclass {

var $myvar2 ;

function myclass2($myparameter, $myparameter2) {
$this->myvar = $myparameter;
$this->myvar2 = $myparameter2;
}

function afficher2($color) {
echo "myvar vaut : $this->myvar
";
echo "myvar2 vaut : $this->myvar2
";
}

}




Dans cet exemple nous venons de déclarer une classe fille myclass2 qui étend la classe mère myclass précédemment créée. Dans cette classe, nous avons ajouté un attribut myvar2 et une méthode afficher2($color )qui ne seront définis que dans cette classe. Nous avons également redéfini un constructeur myclass2($parameter, $parameter2) qui permet d'initialiser les 2 attributs de l'objet lors de sa création.

//



$myobject2 = new myclass2(10, 20);
$myobject2->afficher2("red");
$myobject2->afficher();




Ces trois lignes montrent comment utiliser un objet créé à partir d'une classe fille. Dans un premier temps, on crée une instance de la classemyclass2 que l'on stocke dans un objet nommé $myobject2, en attribuant les valeurs 10 et 20 aux attributs $myvar et $myvar2 . Puis on fait simplement appel à la méthode afficher2($color) définie dans mycalss2. La troisième quant à elle est plus intéressante. En effet, à aucun moment, la méthodeafficher() n'apparaît dans la classe myclass2. Et pourtant, il est tout à fait possible d'utiliser cette méthode à cet endroit car celle-ci a été héritée de la classe mère.

De la même manière, les attributs des classes mères sont également accessible dans les classes filles. Nous avons déjà pu le remarquer dans le constructeur de la classe fille myclass2 ou l'on a affecté une valeur à l'attribut $myvar qui n'est défini que dans la classe mère.

$this->myvar = $myparameter;
spacer
spacer
spacer
À partir de la version 4, PHP inclut un jeu de douze fonctions de gestion des classes et des instances utiles à la POO:
spacer
call_user_method_array -- Appelle une méthode utilisateur avec un tableau de paramètres
call_user_method -- Appelle une méthode utilisateur d'un objet
class_exists -- Vérifie qu'une classe a été définie
get_class_methods -- Retourne les noms des méthodes d'une classe
get_class_vars -- Retourne les valeurs par défaut des attributs d'une classe.
get_class -- Retourne la classe d'un objet
get_declared_classes -- Liste toutes les classes définies
get_object_vars -- Retourne un tableau associatif des propriétés d'un objet
get_parent_class -- Retourne le nom de la classe d'un objet
is_a -- Retourne TRUE si un objet a pour parent une classe donnée
is_subclass_of -- Détermine si un objet est une sous-classe
method_exists -- Vérifie que la méthode existe pour une classe.
spacer
Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible. Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP. [ch2.php.net.php]

spacer
exemple4
// Dans cet exemple, on définit une classe de base, et une extension.
// La classe de base définit un légume, s'il est mangeable ou pas et sa couleur.
//La sous-classe epinard ajoute une méthode pour le cuisiner, et une autre pour savoir s'il est cuisiné.

// Exemple 1. Fonctions d'objets : classes.inc



// classe de base, avec ses membres et ses méthodes

class Legume {

var $edible;
var $color;

function Legume( $edible, $color="green" ) {
$this->edible = $edible;
$this->color = $color;
}

function is_edible() {
return $this->edible;
}

function what_color() {
return $this->color;
}

}


// fin de la classe Legume // Extension la classe de base

class Epinard extends Legume {

var $cuit = FALSE;

function Epinard() {
$this->Legume( TRUE, "green" );
}

function cuisine() {
$this->cuit = TRUE;
}

function is_cooked() {
return $this->cooked;
}

}

// fin de la classe Epinard



// Exemple 2. Fonctions d'objets : test_script.php




include "classes.inc";

// Fonctions utilitaires

function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo "\t$prop = $val\n";
}


function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfonction $method()\n";
}


function class_parentage($obj, $class) {

if (is_subclass_of($GLOBALS[$obj], $class)) {
echo "L'objet $obj appartient à la classe ".get_class($$obj);
echo " est une sous-classe de $class\n";
} else {

echo "L'objet $obj n'est pas une sous-classe de $class\n";
}
}


// instantie 2 objets

$veggie = new Legume(true,"blue");
$leafy = new Epinard();


// affiche les informations sur ces objets

echo "légume : CLASS ".get_class($veggie)."\n";
echo "feuillues : CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."\n";


// affiche les propriétés du légume

echo "\nlégumes : Propriétés\n";
print_vars($veggie);


// et les méthodes des feuillus

echo "\nfeuillus : Méthodes\n";
print_methods($leafy);

echo "\nParentée:\n";
class_parentage("leafy", "Epinard");
class_parentage("leafy", "Legume");

Il est important de noter que dans les exemples ci-dessus, les objets$feuilles sont une instance de Epinard qui est une sous-classe de Legume, donc la dernière partie du script va afficher :


[...]
Parentée:
L'objet feuilles n'est pas une sous classe epinard
L'objet feuilles est une sous-classe de Legume
spacer
spacer

Opérateur :: et parenten haut

spacer
Nous venons de voir qu'il était possible de définir des classes à partir d'autres classes. Dans l'utilisation des objets, il pourra aussi être utile de faire appel à certaines méthodes de certaines classes sans avoir la contrainte que l'objet de cette classe soit créé auparavant..
spacer
Dans sa version 4, PHP permet d'effectuer ce genre de traitement sur des classes. On utilisera alors l'opérateur:: qui à la manière du -> pour un objet permettra l'accès aux méthodes à travers un nom de classe.
spacer
spacer
exemple5


// exemple d'utilisation du l'opérateur ::
// création d'une classe simple pour afficher la date

class myDate {

var $day;
var $mounth;
var $year;

function mydate($day, $mounth, $year) {
$this->day = $day;
$this->mounth = $mounth;
$this->year = $year;
}

function printTodayDate() {
echo date("j/m/Y");
}

}



// Nous appelons la méthode printTodayDate() de la classe myDate sans qu'aucun objet de type myDate ne soit préalablement instancié.



myDate::printTodayDate();

Une méthode de classe telle que celle-ci ne dois pas faire référence aux attributs qui ne seront valorisés que lors de la création effective de l'objet.


// exemple comment on utilise le mot résérvé parent

//De façon similaire, on peut également faire appel à la méthode de la classe mère d'un objet sans pour autant être obligé de créer un objet à partir de cette classe mère. Au lieu d'utiliser le nom littéral de la classe de base dans votre code, vous pouvez utiliser le mot réservé parent , qui représente votre classe de base (celle indiqué par extends , dans la déclaration de votre classe).



class A {


function example() {
echo "Je suis A::example() et je fournis une fonctionnalité de base.
\n";
}

}


//

class B extends A {

function example() {
echo "Je suis B::example() et je fournis une fonctionnalité supplémentaire.
\n";
parent::example();
}

}


//

$b = new B;

// Cette syntaxe va appeler B::example(), qui, à sont tour, va appeler A::example().

$b->example();


// Si l'héritage change, vous n'aurez plus qu'à modifier le nom de la classe dans la déclaration extends de votre classe.

spacer
spacer

spacer

.png" />
/docs/wdu/la-programmation-orientee-objet-en-php_8

/docs/wdu/la-programmation-orientee-objet-en-php_8

3%
Vues :wdu
Je vote

/docs/files/tuto_2147483647.pdf

/docs/files/tuto_2147483647.pdf

3%
Vues :pdf
Je vote

/docs/files/tuto_2147483647.pdf

/docs/files/tuto_2147483647.pdf

3%
Vues :pdf
Je vote

http://orbi.ulg.ac.be/handle/2268/135775?locale=fr

http://orbi.ulg.ac.be/handle/2268/135775?locale=fr

3%
Vues :web
Je vote

http://www.lephpfacile.com/cours/

http://www.lephpfacile.com/cours/

3%
Vues :web
Je vote

http://www.google.com/patents?hl=fr&lr=&vid=USPATAPP12469444&id=NarIAAAAEBAJ&oi=fnd&dq=Policy+and+Charging+Control&printsec=abstract#v=onepage&q=Policy%20and%20Charging%20Control&f=false

http://www.google.com/patents?hl=fr&lr=&vid=USPATAPP12469444&id=NarIAAAAEBAJ&oi=fnd&dq=Policy+and+Charging+Control&printsec=abstract#v=onepage&q=Policy%20and%20Charging%20Control&f=false

3%
Vues :web
Je vote

http://www.freelang.com/dictionnaire/index.php

http://www.freelang.com/dictionnaire/index.php

3%
Vues :web
Je vote

http://www.jmdoudoux.fr/java/dej/indexavecframes.htm

http://www.jmdoudoux.fr/java/dej/indexavecframes.htm

3%
Vues :web
Je vote

/docs/files/j2me.pdf

/docs/files/j2me.pdf

3%
Vues :pdf
Je vote

https://www.google.sn/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.coursbardon-microsoftoffice.fr%2Fcoursword2010.pdf&ei=MAKZUeLvJcaYPb_qgQg&usg=AFQjCNGhZsKWbzhkXS467ls0CpPDjZ8y-Q&bvm=bv.46751780,d.ZWU

https://www.google.sn/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.coursbardon-microsoftoffice.fr%2Fcoursword2010.pdf&ei=MAKZUeLvJcaYPb_qgQg&usg=AFQjCNGhZsKWbzhkXS467ls0CpPDjZ8y-Q&bvm=bv.46751780,d.ZWU

3%
Vues :pdf
Je vote