Maison développement back-end Tutoriel Python Apprenez les trois caractéristiques majeures du PHP orienté objet

Apprenez les trois caractéristiques majeures du PHP orienté objet

Apr 08, 2018 pm 12:30 PM
php 学习 特点

Les trois caractéristiques majeures de PHP pour l'apprentissage orienté objet Objectifs d'apprentissage : Comprendre parfaitement l'abstraction, l'encapsulation, l'héritage, le polymorphisme

Les trois caractéristiques majeures de l'apprentissage orienté objet : l'encapsulation, l'héritage, le polymorphisme Tout d'abord, comprenons simplement Parlons-en à propos de l'abstraction :
Lorsque nous avons défini une classe plus tôt, nous avons en fait extrait les attributs et comportements communs d'une classe de choses pour former un modèle physique (modèle). Cette méthode d'étude des problèmes est appelée abstraction
Apprenez les trois caractéristiques majeures du PHP orienté objet<.>
1. Encapsulation
L'encapsulation consiste à encapsuler les données extraites et les opérations sur les données ensemble. Les données sont protégées en interne et les autres parties du programme n'ont que des opérations autorisées (méthode). opérer sur des données.
php fournit trois modificateurs de contrôle d'accès
public signifie global, accessible à l'intérieur de cette classe, en dehors de la classe et aux sous-classes
protected signifie protégé, seules cette ou ces sous-classes peuvent accéder
private signifie privé et ne peut que être accessible dans cette classe
Les trois modificateurs ci-dessus peuvent modifier à la fois les méthodes et les propriétés (variables). Si la méthode n'a pas de modificateurs d'accès, elle est par défaut publique. Les propriétés des membres doivent spécifier des modificateurs d'accès. écrire var $name en PHP4, ce qui signifie attributs publics. Cette façon d'écrire n'est pas recommandée
Exemple :

Copier le code Le code est le suivant :

Alors, que dois-je faire si je souhaite accéder à des éléments et méthodes protégés et privés en externe ? L'approche habituelle consiste à accéder à ces formats de variables via des fonctions publiques :
<?php 
class Person{ 
public $name; 
protected $age; 
private $salary; 
function __construct($name,$age,$salary){ 
$this->name=$name; 
$this->age=$age; 
$this->salary=$salary; 
} 
public function showinfo(){ 
//这表示三个修饰符都可以在本类内部使用 
echo $this->name."||".$this->age."||".$this->salary; 
} 
} 
$p1=new Person(&#39;张三&#39;,20,3000); 
//这里属于类外部,那么如果用下面的方法访问age和salary都会报错 
// echo $p1->age; echo$p1->salary; 
?>
Copier après la connexion
public function setxxxx($val){

$this->xxxx=$val;
}
public function getxxxx(){
return $ this-> >salary; //Extension : vous pouvez appeler certaines méthodes ici, comme juger le nom d'utilisateur, etc., et ne donner l'accès que s'il est correct
}
Vous peut utiliser echo de l'extérieur $p1->getsalary();
Si Pour accéder à protected et private, vous pouvez également utiliser les méthodes suivantes, mais elles ne sont pas recommandées. Comprenez-les simplement
__set() et __get. ()
__set() attribue des valeurs aux attributs protégés ou privés
__set( $name,$val);
__get() obtient la valeur protégée ou privée
__get($name);
Par exemple :



Copier le code
Le code est le suivant :


//Vous pouvez comprendre le code ci-dessus, mais il est utilisation non recommandée

2. Héritage Regardons d'abord un exemple :

<?php 
class testa{ 
protected $name; 
//使用__set()来管理所有属性 
public function __set($pro_name,$pro_val){ 
//上面$pro_name和$pro_val可自定义 
//下面$this->pro_name为既定,不可更改 
$this->pro_name=$pro_val; 
} 
//使用__get()来获取所有属性值 
public function __get($pro_name){ 
if(isset($pro_name)){ 
return $this->pro_name; 
} else { 
return null; 
} 
} 
} 
$n1=new testa(); 
//正常情况,类外部是不能访问protected属性的,但是用了上面的方法就可以对它们进行操作 
$n1->name=&#39;小三&#39;; 
echo $n1->name; 
?>
Copier après la connexion


Copier le code Le code est le suivant :

Comme le montre l'exemple ci-dessus, lorsque plusieurs classes ont de nombreux attributs et méthodes communs, réutilisation du code Les performances ne sont pas élevées, le code est redondant, pensez à la méthode de traitement en CSS

Solution : héritage

<?php 
class Pupil{ 
public $name; 
protected $age; 
public function getinfo(){ 
echo $this->name.&#39;||&#39;.$this->age; 
} 
public function testing(){ 
echo &#39;this is pupil&#39;; 
} 
} 
class Graduate{ 
public $name; 
protected $age; 
public function getinfo(){ 
echo $this->name.&#39;||&#39;.$this->age; 
} 
public function testing(){ 
echo &#39;this is Graduate&#39;; 
} 
} 
?>
Copier après la connexion
Copier le code

Le code est le suivant :


Comme le montre ce qui précède, l'héritage est un sous-classe (Subclass) continuant les attributs et méthodes publics et protégés dans la classe parent (BaseClass) via la classe parent extends. Les attributs et méthodes privés ne peuvent pas être hérités

Structure de syntaxe :

class nom de la classe parent{} class subclass name extends parent class name{} Détails :

1. Une sous-classe ne peut hériter que d'une seule classe parent (fait référence ici à l'héritage direct si vous souhaitez hériter de plusieurs attributs et méthodes d'une classe); peut utiliser l'héritage multicouche
<?php 
class Students{ 
public $name; 
public $age; 
public function __construct($name,$age){ 
$this->name=$name; 
$this->age=$age; 
} 
public function showinfo(){ 
echo $this->name.&#39;||&#39;.$this->age; 
} 
} 
class Pupil extends Students{ 
function testing(){ 
echo &#39;Pupil &#39;.$this->name.&#39; is testing&#39;; 
} 
} 
class Graduate extends Students{ 
function testing(){ 
echo &#39;Graduate &#39;.$this->name.&#39; is testing&#39;; 
} 
} 
$stu1=new Pupil(&#39;张三&#39;,20); 
$stu1->showinfo(); 
echo &#39;<br/>&#39;; 
$stu1->testing(); 
?>
Copier après la connexion
Exemple :




Copier le code
Le code est le suivant :


2. Créer lorsqu'un objet de sous-classe. est créé, le constructeur de sa classe parent ne sera pas automatiquement appelé par défaut

Exemple :

class A{ public function __construct(){ echo 'A'

} <🎜; >}
<?php 
class A{ 
public $name=&#39;AAA&#39;; 
} 
class B extends A{ 
public $age=30; 
} 
class C extends B{} 
$p=new C(); 
echo $p->name;//这里会输出AAA 
?>
Copier après la connexion
class B extends A{

public function __construct(){
echo 'B'
}
}
$b=new B();/ /Ici, le constructeur dans B sera affiché en premier. S'il n'y a pas de constructeur dans B, le
dans A sera affiché 3. Si vous avez besoin d'accéder à la méthode de la classe parent dans la sous-classe (le modificateur du constructeur et). la méthode membre est protégée ou privée), vous pouvez alors utiliser la classe parent ::nom de la méthode ou parent::nom de la méthode pour compléter [Ici, le parent et le moi-même mentionnés précédemment sont tous deux en minuscules, et une erreur sera signalée en majuscule]
classe A{
public function test(){
echo 'a_test';
}
}
class B extends A{
public function __construct(){
//Les deux les méthodes sont OK
A::test();
parent::test();
}
}
$b=new B(); (classe dérivée) Lorsque la méthode est exactement la même que la méthode de la classe parent (publique, protégée), nous l'appelons substitution de méthode ou substitution de méthode (override) Voir le polymorphisme suivant

3. Polymorphisme <. 🎜>
Exemple :



Copier le code
Le code est le suivant :

<?php 
class Animal{ 
public $name; 
public $price; 
function cry(){ 
echo &#39;i don\&#39;t know&#39;; 
} 
} 
class Dog extends Animal{ 
//覆盖、重写 
function cry(){ 
echo &#39;Wang Wang!&#39;; 
Animal::cry();//这里不会报错,能正确执行父类的cry(); 
} 
} 
$dog1=new Dog(); 
$dog1->cry(); 
?>
Copier après la connexion


小结:
1、当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法如何写,可以让子类去覆盖它的方法,方法覆盖(重写),必须要求子类的方法名和参数个数完全一致
2、如果子类要去调用父类的某个方法(protected/public),可以使用 父类名::方法名 或者 parent::方法名
3、在实现方法重写的时候,访问修饰符可以不一样,但是子类方法的访问权限必须大于等于父类方法的访问权限(即不能缩小父类方法的访问权限)
如 父类public function cry(){} 子类 protected function cry(){} 则会报错
但是子类的访问权限可以放大,如:
父类private function cry(){} 子类 protected function cry(){} 可以正确执行
扩展:
方法重载(overload)
基本概念:函数名相同,但参数的个数或参数的类型不同,达到调用同一个函数,可以区分不同的函数
在PHP5中虽然也支持重载,但是和其它语言还是有很大区别的,php中不能定义多个同名函数
PHP5中提供了强大的“魔术”函数,使用这些魔术函数,我们可以做到函数重载,
这里我们要到到 __call,当一个对象调一个方法时,而该方法不存在,则程序会自动调用__call
【官方不推荐使用】
PHP中有以下几个魔术常量:__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ 等
例:

复制代码 代码如下:

<?php 
class A{ 
function test1($p){ 
echo &#39;test1<br/>&#39;; 
} 
function test2($p){ 
echo &#39;test2<br/>&#39;; 
} 
function __call($method,$p){ 
//这里$p为数组,上面两个变量名可自定义 
if($method == &#39;test&#39;){ 
if(count($p)==1){ 
$this->test1($p); 
} else if(count($p)==2){ 
$this->test2($p); 
} 
} 
} 
} 
$a=new A(); 
$a->test(5); 
$a->test(3,5); 
?>
Copier après la connexion

相关推荐:

PHP面向对象五大原则之依赖倒置原则(DIP)详解_php技巧

PHP面向对象五大原则之里氏替换原则(LSP)详解

PHP面向对象五大原则之开放-封闭原则(OCP)详解

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

See all articles