加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:57:36 所属栏目:PHP教程 来源:网络整理
导读:在下面的程序中最后一个语句echo $objb- test;不应该输出任何值.第二个语句应该抛出一个错误,说无法访问私有成员.但是,我在运行程序时得到输出20. 由于PHP是松散类型的语言,因此$objb在类外创建一个新变量… ?php error_reporting(E_ALL); class A { public
在下面的程序中最后一个语句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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读