Tutoriel: PHP 5 + POO Partie 1
- Nightslyr
- Proficient


- Inscription: Sep 21, 2005
- Messages: 274
- Status: Offline
Introduction:
Le but de ce tutoriel est de présenter aux gens quelque peu familiers avec PHP Programmation Orientée Objet avec cette langue.
Pourquoi la version 5 +? POO en version 4 a été plus ou moins une blague. La langue n'était tout simplement pas équipé pour faire des choses dans le bon sens. Au lieu de cela, nu-os fonctionnalités POO était boulonnée sur la langue sans trop de prévoyance ou de soins. PHP fait d'énormes progrès avec la version 5, en tournant ses capacités de programmation orientée objet risible de raisonnable. PHP n'est pas Smalltalk, Java, C #Ou toute autre langue qui traite la plupart des choses comme des objets, mais son assez bon pour la programmation web.
Son dur pour discuter de la POO sans parler de meilleures pratiques. Theres une différence entre la farce que des fonctions dans une classe et une vraie programmation orientée objet, ce tutoriel qui permettra de répondre.
Donc, sans plus attendre, débutons.
Les classes et les objets et les ours, oh là là!
Eh bien, il n'y a pas d'ours, mais le noyau de la POO tourne autour des concepts d'un classe et un objet .
Qu'est-ce qu'une classe? Une classe, dans la plupart des cas, peut être regardé comme un plan ou d'un moule. Il définit les caractéristiques d'un objet, mais n'est pas un objet en soi. Une classe est aussi un type de données.
PHP Code: [ Select ]
class Car {}
Pas très passionnant.
Rappelez-vous que les classes sont composées de valeurs d'autres types de données simples. Pour notre classe à connaître de ces valeurs, elles doivent être déclarées dans la définition de classe. Ces valeurs sont souvent appelées les données sur les membres de la classe. Ils agissent comme les propriétés de la classe. Donc, pour élargir notre classe Car...:
PHP Code: [ Select ]
class Car
{
$manufacturerName;
$horsePower;
$mpg;
}
{
$manufacturerName;
$horsePower;
$mpg;
}
- class Car
- {
- $manufacturerName;
- $horsePower;
- $mpg;
- }
Bon, et maintenant nous avons certaines propriétés, comment pouvons-nous y accéder? Comment pouvons-nous faire même un objet de tout cela?
Tous les objets doivent être construit . Dès qu'un objet est créé ( instancié , En POO-parler), un constructeur est invoqué. Un constructeur est essentiellement une fonction qui initialise une des valeurs particulières des objets, et le rend prêt à être utilisé dans le reste de votre code. La plupart du temps, vous définirez vous-même le constructeur. Même si vous n'avez pas, cependant, un constructeur sera toujours invoquée - les langages de programmation Default constructor . Le constructeur par défaut crée un objet, mais avec NULL attribué à chaque membre de données. Alors, laisse ajouter un constructeur pour notre classe:
PHP Code: [ Select ]
class Car
{
$manufacturerName;
$horsePower;
$mpg;
function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
}
{
$manufacturerName;
$horsePower;
$mpg;
function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
}
- class Car
- {
- $manufacturerName;
- $horsePower;
- $mpg;
- function __construct($name, $hp, $mpg)
- {
- $this->manufacturerName = $name;
- $this->horsePower = $hp;
- $this->mpg = $mpg;
- }
- }
Theres passe beaucoup de choses ici, laisse donc le décomposer.
Premièrement, tous les constructeurs utiliser "__construct mot-clé" comme leur nom. Et oui, thats deux caractères de soulignement avant "construire". < br>
Deuxièmement, dans cet exemple, le constructeur prend trois arguments.
Troisièmement, la première apparition de la «ce mot-clé". "This" fait référence à l'objet que vous faites présentement affaires. Donc, si essayaient de construire une Ferrari, "ceci" se réfère à celle-là en particulier Ferrari, et rien d'autre. Cela deviendra plus clair dans d'autres exemples. REMARQUE: Lorsque vous utilisez le "ce mot-clé", votre syntaxe doit être précis. L'indicateur variable ($) précède uniquement le «ce mot-clé» et pas le membre de données elle-même.
Donc, maintenant que nous pouvons créer une voiture, comment peut-on invoquer effectivement le constructeur? En utilisant simplement la nouveau mot-clé dans le code principal, comme ceci:
PHP Code: [ Select ]
$myDreamCar = new Car("Ferrari", 523, 10.7);
Bien, maintenant nous avons une voiture pour jouer avec! Mais, euh...comment faire nous jouons avec lui? Nous avons besoin d'ajouter des fonctionnalités non seulement notre voiture, mais toutes les occasions possibles. Cela signifie que nous devons modifier la classe de nouveau, en ajoutant des fonctions qui peuvent agir sur les membres du groupe de données. En POO-parole, ces fonctions sont appelées méthodes .
Ajout d'une méthode à une classe est assez simple. Vous définissez simplement une nouvelle fonction au sein de la classe:
PHP Code: [ Select ]
class Car
{
$manufacturerName;
$horsePower;
$mpg;
function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
function addNOS($extraHP)
{
$this->horsePower += $extraHP;
}
}
{
$manufacturerName;
$horsePower;
$mpg;
function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
function addNOS($extraHP)
{
$this->horsePower += $extraHP;
}
}
- class Car
- {
- $manufacturerName;
- $horsePower;
- $mpg;
- function __construct($name, $hp, $mpg)
- {
- $this->manufacturerName = $name;
- $this->horsePower = $hp;
- $this->mpg = $mpg;
- }
- function addNOS($extraHP)
- {
- $this->horsePower += $extraHP;
- }
- }
Et c'est ainsi que nous invoquons une méthode:
PHP Code: [ Select ]
$myDreamCar = new Car("Ferrari", 523, 10.7);
$myDreamCar->addNOS(100);
$myDreamCar->addNOS(100);
- $myDreamCar = new Car("Ferrari", 523, 10.7);
- $myDreamCar->addNOS(100);
Facile, non? Eh bien, pas si vite.
Modificateurs d'accès & #40; Enlevez vos mains de mes cookies! & #41;
Une des philosophies de guidage derrière la POO, c'est que les types de données doivent être encapsulé . Autrement dit, le code principal ne doit pas connaître (ou de soins) sur le fonctionnement interne d'un objet. Tant que l'objet se comporte de manière prévisible, cela devrait suffire. En outre, les objets eux-mêmes besoin d'être protégé contre le code plus grande du système. Une entrailles objets ne devraient pas pouvoir être modifiées à la baisse d'un chapeau. Ayant un côté de l'équation en savent trop sur les autres pistes à accouplement , Ce qui signifie qu'un changement dans une partie du code crée une cascade d'autres changements qui doivent être faites. C'est l'antithèse de la POO et des mesures devraient être prises pour éliminer d'attelage et de promouvoir la modularité.
Heureusement, PHP nous donne un moyen de protéger les parties vitales de nos objets: modificateurs d'accès.
Modificateurs d'accès dire à la fois le système et d'autres codeurs la disponibilité des membres objets une et de méthodes. Il ya trois modificateurs de base:
Public: Ce membre ou la méthode est librement accessible pour être modifiés ou invoqué par tout autre morceau de code.
Protégées: le membre ou la méthode est librement accessible pour être modifiés ou invoqué par tout enfant Object *, mais il est caché à tout le monde (* objets enfants seront discutés plus tard).
Privé: ce membre ou une méthode ne peut être directement consulté par n'importe qui.
La puissance de ces modificateurs peuvent être vus lorsqu'ils sont utilisés ensemble. Permet de revoir nos catégories de voitures et d'apporter quelques modifications:
PHP Code: [ Select ]
class Car
{
private $manufacturerName;
private $horsePower;
private $mpg;
public function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
public function addNOS($extraHP)
{
$this->horsePower += $extraHP;
}
}
{
private $manufacturerName;
private $horsePower;
private $mpg;
public function __construct($name, $hp, $mpg)
{
$this->manufacturerName = $name;
$this->horsePower = $hp;
$this->mpg = $mpg;
}
public function addNOS($extraHP)
{
$this->horsePower += $extraHP;
}
}
- class Car
- {
- private $manufacturerName;
- private $horsePower;
- private $mpg;
- public function __construct($name, $hp, $mpg)
- {
- $this->manufacturerName = $name;
- $this->horsePower = $hp;
- $this->mpg = $mpg;
- }
- public function addNOS($extraHP)
- {
- $this->horsePower += $extraHP;
- }
- }
Comme vous pouvez le voir, les membres de données ont été faits privés. Cela leur évite d'être directement accessibles par n'importe quel autre code. En fait, en essayant d'exécuter quelque chose comme:
PHP Code: [ Select ]
$ferrari = new Car("Ferrari", 523, 10.7);
$ferrari->mpg = 12.3;
$ferrari->mpg = 12.3;
- $ferrari = new Car("Ferrari", 523, 10.7);
- $ferrari->mpg = 12.3;
Va générer une erreur.
Mais, la question demeure: pourquoi passer par tout cela, si les membres de données devra être consulté quand même?
Eh bien, c'est vrai qu'un des membres les objets devront être consulté à un moment donné de sa vie. Mais, le manière dans lequel theyre consulté questions. Comme je l'ai dit auparavant, le couplage est quelque chose à éviter à tout prix. Donc, pour s'assurer qu'un objet n'est pas empêtré dans les programmes de code principal, les lignes de communication claires doivent être établies. En forçant le code principal pour traiter avec l'objet du point de vue de ses méthodes, vous vous assurez que les façons dont l'objet peut être utilisé sont prévisibles et claires. Il favorise également la modularité, que la mauvaise discuter plus tard.
Conclusion
Ceci conclut l'introduction à la programmation orientée objet avec PHP. À ce stade, vous devriez être en mesure de créer une classe, instancier un objet à partir de cette classe, et invoquer que les objets méthodes. La viande de la POO sera examinée, au moins en partie, dans le didacticiel suivant.
- Anonymous
- Bot


- Inscription: 25 Feb 2008
- Messages: ?
- Loc: Ozzuland
- Status: Online
Novembre 18th, 2009, 2:33 pm
- Rabid Dog
- Web Master


- Inscription: Mai 21, 2004
- Messages: 3229
- Loc: South Africa
- Status: Offline
La raison pour laquelle les modificateurs tombe dans des concepts tels que l'agrégation et la composition. N'oubliez pas que juste parce que vous avez un membre, vous n'avez pas besoin de l'exposer.
Pensez un instant sur le concept d'un client (étant défini comme une entité juridique) et que ce client a des contacts. Vous wouldnt voulons donner aux gens la possibilité d'écrire sur la liste de contacts, mais vous pouvez leur donner la possibilité d'ajouter et supprimer des contacts. Vous pouvez ensuite créer et d'ajouter et de supprimer la méthode qui interagit avec la liste de contacts à l'intérieur de la catégorie, mais jamais expose la liste de contacts. Si vous tournez à besoin d'exposer la liste des contacts pour afficher les entrées que vous auriez à le cloner et repassez alors la liste à l'intérieur de la classe client n'est jamais manipulées directement par le développeur en utilisant votre API
Pensez un instant sur le concept d'un client (étant défini comme une entité juridique) et que ce client a des contacts. Vous wouldnt voulons donner aux gens la possibilité d'écrire sur la liste de contacts, mais vous pouvez leur donner la possibilité d'ajouter et supprimer des contacts. Vous pouvez ensuite créer et d'ajouter et de supprimer la méthode qui interagit avec la liste de contacts à l'intérieur de la catégorie, mais jamais expose la liste de contacts. Si vous tournez à besoin d'exposer la liste des contacts pour afficher les entrées que vous auriez à le cloner et repassez alors la liste à l'intérieur de la classe client n'est jamais manipulées directement par le développeur en utilisant votre API
Watch me grow
Page 1 sur 1
Pour répondre à ce sujet, vous devez vous connecter ou vous enregistrer. Il est gratuit.
Afficher de l'information
- Total des messages de ce sujet: 2 messages
- Modérateur: Tutorial Writers
- Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités
- Vous ne pouvez pas poster de nouveaux sujets
- Vous ne pouvez pas répondre aux sujets
- Vous ne pouvez pas éditer vos messages
- Vous ne pouvez pas supprimer vos messages
- Vous ne pouvez pas joindre des fichiers
