zoukankan      html  css  js  c++  java
  • 外部调用类的私有属性

    外部调用类的私有属性

    先来了解一下PHP类中的__get__set函数
    当试图获取一个不可达属性时,类会自动调用__get函数。
    当试图设置一个不可达属性时,类会自动调用__set函数。

    首先,来看一下__get函数,先来获取一个可达属性试试:

    <?php
        class A{
            public $a=1;
            private $b=2;
            function __get($name){
                echo 'you can get '.$name;
            }
        }
        $dy = new A();
        echo $dy->a;
    ?>
    

    看一下它的返回:

    1
    

    没有问题,没有调用__get函数,现在我来访问一个私有的不可达属性:

    <?php
        class A{
            public $a=1;
            private $b=2;
            function __get($name){
                echo 'you can get '.$name;
            }
        }
        $dy = new A();
        echo $dy->b;
    ?>
    

    会发现:

    you can get b
    

    说明这里调用了__get函数,我再来看一下__set函数,同样也是先使用可达的public属性:

    <?php
        class A{
            public $a;
            private $b;
            function __set($name,$val){
                echo 'you can get '.$name.$val;
            }
        }
        $dy = new A();
        $dy->a = 1;
        echo $dy->a;
    ?>
    

    看一下输出:

    1
    

    使用成功,没有问题,接着我们来使用私有属性:

    <?php
        class A{
            public $a;
            private $b;
            function __set($name,$val){
                echo 'you can get '.$name.$val;
            }
        }
        $dy = new A();
        $dy->b = 1;
        echo $dy->b;
    ?>
    

    这时看到:

    you can get b1
    
    PHP Fatal error:  Cannot access private property A::$b in /usercode/file.php on line 11
    

    这里调用了__set函数并提示我们不能使用类的私有属性。
    现在来通过__set函数实现外部使用私有属性:

    <?php
        class A{
            public $a;
            private $b;
            function __set($name,$val){
                    $this->$name=$val;
            }
            function B(){
                echo $this->b;
            }
        }
        $dy = new A();
        $dy->b = 1;
        $dy->B();
    ?>
    

    看一下输出:

    1
    

    说明使用成功。

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/Timesi/p/9383728.html
Copyright © 2011-2022 走看看