Maison  >  Article  >  développement back-end  >  Explication détaillée du mot-clé Static en PHP orienté objet (exemple de code)

Explication détaillée du mot-clé Static en PHP orienté objet (exemple de code)

易达
易达original
2020-05-25 14:08:081801parcourir

Objectifs de cet article :

1. Comprendre la définition et la fonction de la statique

2.

Nous Pour apprendre une connaissance, vous pouvez l'apprendre sur la base des idées de 3w1h. Présentons brièvement 3w1h

3w1h qui est

● quoi (quoi)

● pourquoi (pourquoi l'utiliser, quelle est sa fonction)

● où (scénario d'utilisation)

● comment (plus précisément comment l'utiliser)

(1) , définition du mot-clé statique (quoi)

1 Les attributs ou méthodes modifiés par static sont appelés membres statiques de la classe

(2) Le rôle du mot-clé statique (pourquoi)

1. Laissez toutes les instances d'une classe partager un certain attribut ou méthode

(3) Scénarios d'utilisation statiques (où)

1. une certaine méthode ou attribut à être Lorsqu'il est partagé par toutes les instances, vous pouvez considérer statique

(4), utilisation détaillée de statique (comment)

Résumé :

1. Static Pour définir un attribut, ajoutez static directement avant la définition de l'attribut. Par exemple, static public $Name::$Attribute Name

● Dans la classe, vous pouvez passer self : :$Nom de l'attribut

3. Pour définir une méthode statique, ajoutez static directement avant la définition de la méthode, comme la fonction publique statique Hello(){ }

4. Les méthodes statiques ne peuvent pas être obtenues en utilisant instances de la classe, mais peut être obtenu des manières suivantes :

● Nom de la classe :: Nom de la méthode

● À l'intérieur de la classe, vous pouvez utiliser self :: nom de la méthode

5. En php, vous ne pouvez pas utiliser static pour modifier la classe, vous pouvez uniquement modifier les propriétés ou les méthodes

6. À l'intérieur de la méthode statique, les propriétés non statiques ne peuvent pas être appelées, seules les propriétés statiques

7. Les méthodes non statiques ne peuvent pas être appelées à l'intérieur des méthodes statiques, seules les méthodes statiques

peuvent être appelées 8. Dans les méthodes non statiques, les deux méthodes non statiques peuvent être appelées. Les propriétés statiques peuvent appelez également des propriétés statiques

9. Dans les méthodes non statiques, vous pouvez appeler soit des méthodes non statiques, soit des méthodes statiques

Tous les résumés sont basés sur la pratique Viens, puis ensuite, nous utilisons du code réel pour démontrer chaque résumé ci-dessus afin de voir s'ils sont corrects

(4), code spécifique

Cas 1 :

Objectifs pratiques :

1. Pour définir des attributs statiques, ajoutez static directement avant la définition de l'attribut, comme static public $name;

2. Les attributs statiques ne peuvent pas utiliser de classes. Au lieu de cela, obtenez-le via les méthodes suivantes :

● Nom de la classe :: $ Nom de l'attribut

● À l'intérieur de la classe, vous pouvez utiliser self :: $ Nom de l'attribut

<?php 
 class Human{
    static public $name = "人类";//静态属性的定义
    public function say(){
        echo  "self::name = ".self::$name ."<br/>";
    }
}
//输出静态属性
echo "名称为:".Human::$name."<br/>";
$human = new Human();
$human->say();
?>

Le résultat en cours d'exécution est :

Cas 2 :

Explication détaillée du mot-clé Static en PHP orienté objet (exemple de code)

Objectif pratique :

1. Définition de la méthode statique, ajouter du static directement avant la définition de la méthode, telle que la fonction publique statique Hello(){ }

2. Les méthodes statiques ne peuvent pas être obtenues à l'aide d'instances de la classe, mais peuvent être obtenues des manières suivantes :

●Nom de la classe : Méthode name

Quantity A l'intérieur de la classe, vous pouvez passer self::Method name

<?php 
 class Human{
    public function __construct(){
        self::staticFun1();
    }
    static public function staticFun1(){
        echo "我是静态方法<br/>";
    }
}
//输出静态方法
Human::staticFun1();
//运行构造函数,看是否可以被正常调用
$human = new Human();

?>

Le résultat est :

Cas 3 :

Explication détaillée du mot-clé Static en PHP orienté objet (exemple de code)

Objectifs pratiques :

1 En PHP, vous ne pouvez pas utiliser de statique pour modifier des classes, uniquement des attributs ou des méthodes

<?php 
static class Human{
   
}
?>

Le résultat en cours d'exécution. est :

Erreur d'analyse : erreur de syntaxe, 'classe' inattendue (T_CLASS), attente de :: (T_PAAMAYIM_NEKUDOTAYIM) dans D:E-classclass-codeclassingindex.php à la ligne 2

Cas 4 :

Objectifs pratiques :

1 Les propriétés non statiques ne peuvent pas être appelées à l'intérieur des méthodes statiques, seules les propriétés statiques peuvent être appelées

<?php 
class Human{
    static public $staticName = "静态属性-人类";
    public $commonName="非静态属性-人类";
    
    //定义静态方法 静态方法调用非静态属性
    static public function staticFun1(){
        echo $this->commonName."<br/>";
        
    }
    //测试静态方法调用静态属性
    static public function staticFun2(){
        echo self::$staticName."<br/>";
        
    }
}
Human::staticFun2();//OK
Human::staticFun1();//not OK
?>

Le résultat en cours d'exécution. est :

Propriété statique-humain

Erreur fatale : Erreur non détectée : Utilisation de $this lorsqu'il n'est pas dans le contexte de l'objet dans D:E-classclass-codeclassingindex.php:8 Trace de pile : # 0 D :E-classclass-codeclassingindex.php(18) : Human::staticFun1() #1 {main} lancé dans D:E-classclass-codeclassingindex.php à la ligne 8

Cas 5 :

Objectifs pratiques :

1. Les méthodes non statiques ne peuvent pas être appelées à l'intérieur des méthodes statiques, seules les méthodes statiques peuvent être appelées

<?php 
class Human{
   
    //定义静态方法 
    //测试静态方法调用 静态方法
    static public function staticFun1(){
        self::staticFun2();
        $this->commonFun1();
    }
    static public function staticFun2(){
        echo "我是静态方法2<br/>";
    }
    //普通方法
    public function commonFun1(){
        echo "我是普通方法1<br/>";
    }

    
}
Human::staticFun1();
?>

Le résultat de l'opération est :

Je suis statique méthode 2

Fatal error: Uncaught Error: Using $this when not in object context in D:\E-class\class-code\classing\index.php:8 Stack trace: #0 D:\E-class\class-code\classing\index.php(20): Human::staticFun1() #1 {main} thrown in D:\E-class\class-code\classing\index.php on line 8

案例六:

实践目标:

1、非静态方法内部,既可以调用非静态属性也可以调用静态属性

<?php 
class Human{
    static public $staticName = "静态属性-人类";
    public $name = "非静态属性-人类";

    ///普通方法
    public function commonFun1(){
       echo self::$staticName."<br/>";
       echo $this->name."<br/>";
    }

}
$human = new Human();
$human->commonFun1();
?>

运行结果为:

静态属性-人类
非静态属性-人类

案例七:

实践目标:

1、非静态方法内部,既可以调用非静态方法也可以调用静态方法

<?php 
class Human{
    ///普通方法
    public function commonFun1(){
       self::staticFun1();
       $this->commonFun2();
    }

    //测试静态方法调用 静态方法
    static public function staticFun1(){
        echo "我是静态方法1<br/>";
    }
    public function commonFun2(){
        echo "我是普通方法2<br/>";
    }
}
$human = new Human();
$human->commonFun1();
?>

运行结果为:

我是静态方法1
我是普通方法2

(五)、学以致用

问题:

    1、所有的NBA球员都有一个共同的联盟总裁,David Stern(大卫*斯特恩)

    2、总裁换成了“Adam Silver” 怎么办?

     大家自己思考一下,再看后面的结果

.........................

答案揭晓:

思路分析:

1、“换”是一个动词,换总裁,所以是一个方法,而总裁是一个数据,所以是一个属性

2、换总裁要达到一个目的就是,换了以后,这个对象仍然要被其他所有的NBA球员对象使用到

3、既然 总裁 (属性) 要被所有的NBA球员对象 共享,那么我们就可以结合static的作用,将总裁属性定义为静态属性

4、所以根据综上所述,大概的思路就是定义一个NBA球员类,然后类里面主要有静态属性“总裁”和一个 换总裁 的方法

具体代码如下:

<?php 
//Nba球员类
class NbaPlayer{
    public $name = "";
    //构造函数初始化对象
    public function __construct($name){
        $this->name = $name;
    }
    //总裁
    static public $president = "David Stern";

    //换总裁方法
    public function changePresident($name){
      self::$president = $name;
    }

}
$jordon = new NbaPlayer("乔丹");
$kebo = new NbaPlayer("科比");
echo "输出他们目前共同的总裁,总裁为:".NbaPlayer::$president."<br/>";

echo "现在把乔丹总裁换成Adam Silver<br/>";
$jordon->changePresident("Adam Silver");
echo "输出科比的总裁是否也和乔丹的一样,科比总裁为:".NbaPlayer::$president."<br/>";
?>

运行结果为:

输出他们目前共同的总裁,总裁为:David Stern
现在把乔丹总裁换成Adam Silver
输出科比的总裁是否也和乔丹的一样,科比总裁为:Adam Silver

总结:

1、本文主要是讲了static关键字的定义和特点

希望本文能给大家带来一定的帮助,谢谢!!!

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