Maison  >  Article  >  développement back-end  >  Discutez en détail de l'utilisation de mots-clés publics, privés, protégés, abstraits et autres en PHP

Discutez en détail de l'utilisation de mots-clés publics, privés, protégés, abstraits et autres en PHP

jacklove
jackloveoriginal
2018-07-04 17:41:161888parcourir

L'éditeur ci-dessous partagera avec vous un article qui traite de l'utilisation des mots-clés publics, privés, protégés, abstraits et autres en PHP. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Suivons l'éditeur pour jeter un œil

Mots-clés couramment utilisés en PHP

PHP contient de nombreuses restrictions sur les fonctions et les classes Les mots-clés couramment utilisés incluent généralement abstrait, final, interface, public, protégé, privé, statique, etc. Ci-dessous, nous analyserons et trierons leur utilisation.

Mots clés public, private, protégés pour les variables et les méthodes

public a la plus grande autorité et peut être utilisé par les sous-classes ou pris en charge Lorsqu'il est appelé après instanciation,

protected signifie protégé, et les autorisations d'accès ne sont accessibles que dans les sous-classes et cette classe

private signifie privé, uniquement. Il peut s'agir du mot-clé static

des variables. et les méthodes accessibles dans la classe actuelle.>

<?php
//
/**
* Define MyClass
*/
class MyClass
{
 public $public = &#39;Public&#39;;
 protected $protected = &#39;Protected&#39;;
 private $private = &#39;Private&#39;;
 public function printHello()
 {
 echo $this->public;
 echo $this->protected;
 echo $this->private;
 }
 protected function pro_test(){
 var_dump(1);
 }
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
//echo $obj->protected; // 这行会产生一个致命错误
//echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
$obj->pro_test();//直接报错
?>
La fonction de static est de permettre d'appeler des valeurs ou des méthodes dans une classe sans instanciation. fonction de stockage des valeurs. Par exemple, les résultats d'une exécution sans statique sont les suivants :

Si nous ajoutons de la statique à la variable, elle deviendra comme ça

<?php
function test(){
 $var=1;
 echo $var."</br>";
 $var++;
}
test();// 1
test();// 1
test();// 1
?>

Vous ne pourrez peut-être pas réaliser les avantages de faire cela en PHP ici, alors supposons d'abord que les lecteurs sont également familiers avec JS. Il n'y a pas de mot-clé statique dans JS, donc si nous voulons implémenter une fonction qui peut sauvegarder, nous devons écrire un programme qui utilise le résultat de chaque opération du programme comme base pour l'opération suivante.

<?php
function test(){
 static $var=1;
 echo $var."</br>";
 $var++;
}
test();// 1
test();// 2
test();// 3
?>

Cela entraînera une fuite dans les variables globales. Si davantage de variables sont générées, cela entraînera des fuites de mémoire (les fuites de mémoire font référence à la seule chose qui se passe). que les variables occupent trop d'espace mémoire et ne sont pas libérées)

var glo=0;
 function test(){
 glo++;
 document.writeln(glo);
 }
 test();
 test();
 test();

Il a donc un avantage par rapport aux langages qui ne définissent pas le statique conserve les variables, ne perd pas de mémoire et ne provoque pas facilement une mauvaise utilisation des variables globales (car la portée n'est pas globale)

<script>
 var glo=0;
 function test(){
 glo++;
 document.writeln(glo);
 }
 test();// 1
 test();// 2
 test();// 3 
</script>

Le mot-clé final pour les classes et les méthodes

$age=0;
$age++;
function test1() {
 static $age = 100;
 $age++;
 echo $age."</br>";
}
function test2() {
 static $age = 1000;
 $age++;
 echo $age."</br>";
}
test1(); // 101
test2(); // 1001
final ne peut être utilisé que pour modifier les classes et les fonctions. Après avoir utilisé final, il ne peut pas être hérité. Par exemple, le code suivant sera directement. signaler une erreur

Interface spéciale de mots clés, résumé

class BaseClass {
 public $public = &#39;Public&#39;;
 function test() {
 echo "BaseClass::test() called\n";
 }
 final public function moreTesting() {
 echo "BaseClass::moreTesting() called\n";
 }
}
class ChildClass extends BaseClass {
 public function moreTesting() {
 echo "ChildClass::moreTesting() called\n";
 }
}
La signification de interface est de normaliser le style de programmation, imaginez que si une interface est implémentée, alors lorsque nous utilisons cette classe d'interface, nous devons implémenter les méthodes à l'intérieur, qui jouent un rôle dans la dénomination unifiée.

La classe peut hériter de plusieurs interfaces. L'héritage unique entre les interfaces est obtenu via des extensions. La relation entre la classe et l'interface est établie via des implémentations

Exemple de code :

La fonction de abstract est en fait la même que celle de l'interface, mais toutes les méthodes de l'interface doivent être implémentées, mais dans la classe modifiée par abstract Il peut y avoir une ou plusieurs méthodes de modification abstraites, on peut donc comprendre que l'interface est un cas particulier d'abstrait (lorsque toutes les méthodes sont des méthodes abstraites, elles doivent être implémentées). Abstract a les caractéristiques suivantes :

1. Tant qu'au moins une méthode de la classe utilise le mot-clé abstract, alors la classe est abstraite et le mot-clé correspondant doit être ajouté

2. Les méthodes abstraites n'ont que la partie déclaration de la méthode et aucun corps de méthode.

<?php
interface testA{
 function funcA();
}
interface testB{
 function funcB();
}
interface testC extends testA {
 function funcC();
}
class run implements testC ,testB {
 public function funcA()
 {
 // TODO: Implement funcA() method.
 }
 public function funcB()
 {
 // TODO: Implement funcB() method.
 }
 public function funcC()
 {
 // TODO: Implement funcC() method.
 }
}
?>
Mais à mon avis, il existe plusieurs scénarios comme celui-ci dans des applications pratiques du abstrait

1 Standardiser les règles de dénomination des parties publiques lors d'une programmation multi-personnes (sans aucune explication, le principe est Idem. comme interface)

2. Pour empêcher le parent d'être instancié directement, utilisez le code de style

comme suit :

L'article ci-dessus traite en détail de l'utilisation des mots-clés publics, privés, protégés, abstraits et autres en PHP. C'est tout le contenu partagé par l'éditeur. J'espère qu'il pourra vous donner une référence, et j'espère que vous le ferez. prend en charge le site Web PHP chinois.

Articles qui pourraient vous intéresser :

<?php
abstract class shopping
{
 public function buy()
 {
 echo "buy";
 }
 public function loan()
 {
 echo "loan";
 }
}
class leslieBuy extends shopping
{
}
//$test1=new shopping;//直接语法错误
$leslieSie = new leslieBuy;
$leslieSie->loan();//打印出loan
?>

Explication sur la façon dont PHP peut former une nouvelle instance de tableau avec la même valeur dans un tableau

Explication détaillée de la résolution du problème des longueurs de chaînes PHP incohérentes

La ligne de commande exécute les méthodes de configuration $argv et $argc dans le Exemple de script_php php


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:
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