php : Contrôle d'accès pour les membres d'une classe

黄舟
Libérer: 2023-03-12 11:16:01
original
2662 Les gens l'ont consulté

Contrôle d'accès

Le contrôle d'accès des attributs ou des méthodes est réalisé en ajoutant les mots-clés public, protected ou private devant.

Les membres de classe définis par public sont accessibles de n'importe où.

Les membres de classe définis par protected sont accessibles par les sous-classes et les classes parentes de la classe dans laquelle ils se trouvent (bien sûr, le la classe dans laquelle se trouve le membre est également accessible) ; les membres de la classe définis par private ne sont accessibles que par la classe dans laquelle ils se trouvent.

prend en charge les 3 modificateurs d'accès suivants en PHP5.

(1) public. Ce modificateur est la valeur par défaut, si aucun modificateur d'accès n'est spécifié pour la propriété ou la méthode, elle sera

publique. Les propriétés ou méthodes publiques sont accessibles à la fois à l’intérieur et à l’extérieur de la classe.

(2) privé. Ce modificateur indique que la propriété ou la méthode marquée n'est accessible qu'au sein de la classe. Ne peut pas être hérité par  !

(3) protégé. Ce modificateur indique que la propriété ou la méthode marquée n'est accessible qu'au sein de la classe. Peut être hérité

privé, la même classe est accessible, mais les sous-classes et les classes externes ne peuvent pas y accéder ;

protégé, la même classe et les mêmes sous-classes sont accessibles, mais les classes externes ne le peuvent pas.

Contrôle d'accès pour les membres de la classe

Les membres de la classe doivent être définis à l'aide des mots-clés public, protected ou private

<?php
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = &#39;Protected2&#39;;
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}
$obj2 = new MyClass2();
echo $obj->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private
class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }
    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}
class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}
$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>
Copier après la connexion

Contrôle d'accès pour les méthodes Accès Les méthodes de contrôle

de la classe

doivent être définies à l'aide des mots-clés public, protected ou private. Si ces mots-clés ne sont pas définis, la méthode sera définie sur le public par défaut.

<?php

class MyClass
{
    // 构造函数必须是 public
    public function construct() { }

    // 声明一个 public 的方法
    public function MyPublic() { }

    // 声明一个 protected 的方法
    protected function MyProtected() { }

    // 声明一个 private 的方法
    private function MyPrivate() { }

    // 这个方法也是 public 的
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // Public、Protected 和 Private 都被调用了



class MyClass2 extends MyClass
{
    // This is public
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // Public 和 Protected 都被调用了,但 Private 不会被调用
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal