PHP访问父类变量

PHP访问父类变量,php,class,variables,parent,Php,Class,Variables,Parent,问题: 如何在子变量中显示父变量? 预期结果将回显“父bb”echo$this->bb; 该变量是继承的,不是私有的,因此它是当前对象的一部分 以下是您请求的有关使用父项的更多信息的附加信息:: 如果要从父类向方法添加额外功能,请使用parent::。例如,想象一架飞机类: 级飞机{ 私人试飞员; 公共职能机构(试点){ $this->pilot=$pilot; } } 现在假设我们想要创造一种新型的飞机,它也有一个导航仪。您可以扩展_construct()方法来添加新功能,但仍可以使用父

问题: 如何在子变量中显示父变量? 预期结果将回显“父bb”

echo$this->bb;
该变量是继承的,不是私有的,因此它是当前对象的一部分


以下是您请求的有关使用
父项的更多信息的附加信息:

如果要从父类向方法添加额外功能,请使用
parent::
。例如,想象一架
飞机
类:

级飞机{
私人试飞员;
公共职能机构(试点){
$this->pilot=$pilot;
}
}
现在假设我们想要创造一种新型的飞机,它也有一个导航仪。您可以扩展_construct()方法来添加新功能,但仍可以使用父级提供的功能:

class轰炸机扩展飞机{
私人$navigator;
公共函数构造($pilot,$navigator){
$this->navigator=$navigator;
父项::_构造($pilot);//将$pilot分配给$this->pilot
}
}

通过这种方式,您可以遵循开发流程,但仍然可以提供所需的所有功能。

$bb在扩展了受保护的A类后,现在已成为B类的私有成员

所以你访问$bb就像它是B类的属性一样

class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$bb; //Fatal error: Undefined class constant 'bb' 
    }
}

$test = new B($some);
$test->childfunction();

因为它是遗传的,所以只需重复它

class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo $this->bb; 
    }
}

$test = new B($some);
$test->childfunction();

父类的所有属性和方法都在子类中继承,因此理论上您可以在子类中访问它们,但请注意在您的类中使用
protected
关键字,因为在子类中使用时会引发致命错误。
如中所述

属性或方法的可见性 可以通过在 以公众为关键词的宣言, 受保护的或私人的。班级成员 可以访问声明的public 到处都是。宣布受保护的成员 只能在类内访问 自身和由继承和父代继承 上课。宣布为非公开的成员 只能由以下类访问: 定义成员


父项::$bb尝试检索使用值
$bb
定义的静态常量

相反,要:

echo $this->bb;

注意:如果B是唯一调用它的类,则不需要调用
parent::\u construct
。简单地说,不要在B类中声明_构造。

这意味着parent关键字仅用于访问父方法?通常,当您要重写父方法,但仍然引用父方法的功能时,您会使用parent::。如果您只想调用父对象的方法,那么您可以使用与变量相同的方法:
$this->parentmethod()
parent:$this->bb
必须是我在
parent::$this->bb
中见过的最疯狂的面向对象语法。我建议删除或进一步解释以降低答案的复杂性。这不起作用。
致命错误:未捕获错误:访问未声明的静态属性:A:$this in/Applications/MAMP/htdocs/native#testing/index.php:24堆栈跟踪:#0/Applications/MAMP/htdocs/native#testing/index.php(29):B->childfunction()#1{main}在第24行的/Applications/MAMP/htdocs/native_testing/index.php中抛出此代码返回
致命错误:访问未声明的静态属性:A::$This
protected
在继承类和父类中使用时不会抛出错误。请确保变量未定义为private。我无法使其正常工作。这个变量是公共的,但是这些变量并没有被继承,显然不是。我以为会,但发现他们没有继承。
echo $this->bb;
class A {
    private $aa;
    protected $bb = 'parent bb';

    function __construct($arg) {
       //do something..
    }

    private function parentmethod($arg2) {
       //do something..
    }
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$this->bb; //works by M
    }
}

$test = new B($some);
$test->childfunction();`