我似乎能够直接从PHP中的实例为类创建属性?

前端之家收集整理的这篇文章主要介绍了我似乎能够直接从PHP中的实例为类创建属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的程序中最后一个语句echo $objb-> test;不应该输出任何值.第二个语句应该抛出一个错误,说无法访问私有成员.但是,我在运行程序时得到输出20.

由于PHP是松散类型的语言,因此$objb在类外创建一个新变量…

<?PHP
    error_reporting(E_ALL);
    class A {
        public $a;
        private $test;

        protected function sayhello(){
            echo "<p>hello class A</p>";
        }

    }//end of class A

    class B extends A {
        //private $c;
        public function sayhellonew(){
            $this->sayhello();
            echo "<p>hello class B</p>";
        }
    }//end of class B

    $objb = new B();
    $objb->sayhellonew();

    $objb->a = 10;
    echo $objb->a;

    echo "<br>";

    $objb->test = 20;
    echo $objb->test;
    ?>

产量
我得到输出20为什么它工作?

由于$test属性是A的私有属性,因此在B的范围内不可见.这意味着B可以拥有自己的名为$test的属性.当您指定objb-> test = 20时,这就是您要设置的内容.

以下显示您实际上没有设置私有变量:

class A {
    public $a;
    private $test = 10;

    protected function sayhello(){
        echo "<p>hello class A</p>";
    }
    public function showTestA() {
        echo "Test in A = " . $this->test . '<br>';
    }

}//end of class A

class B extends A {
    //private $c;
    public function sayhellonew(){
        $this->sayhello();
        echo "<p>hello class B</p>";
    }
    public function showTestB() {
        echo "Test in B = " . $this->test . '<br>';
    }
}//end of class B

$objb = new B();
$objb->test = 20;
$objb->showTestA();
$objb->showTestB();

这将显示

Test in A = 10
Test in B = 20

猜你在找的PHP相关文章