我有一个名为'person'的父类。 “个人”是“人”的儿童阶层。
在'person'中,我有一个名为'$ _pk_person'的受保护财产;
在'个人'中,我想创建一个名为'$ _fk_individual_person'的受保护属性,其值等于'$ _pk_person'的继承值。
我不应该仅仅通过声明:
来做到这一点protected $_fk_individual_person = {$this->_pk_person};
或
protected $_fk_individual_person = $_pk_person;
或
protected $_fk_individual_person = get_pk_person();
或
protected $_fk_individual_person = self::get_pk_person();
或
protected $_fk_individual_person = self::_pk_person;
或
protected $_fk_individual_person = parent::_pk_person;
或
protected $_fk_individual_person = parent::get_pk_person();
在班级'个人'??
他们都没有工作。我必须在某个地方犯一个基本错误,因为我是一个完整的新手。
请帮帮我。
使用CONSTRUCTOR后,我的班级看起来像这样:
class individual extends person {
public $_fk_individual_person;
function __construct() {
$this->_fk_individual_person = $this->_pk_person;
}
}
我测试了它,但屏幕是空白的: $ xyz = new individual();
$xyz->pk_person='abcd';
echo $xyz->_fk_individual_person;
我现在在哪里搞砸了?对不起,我是一个绝对的新手(昨天开始编写oop编码,这是我的第一堂课)
答案 0 :(得分:4)
如果没有构造函数,则无法执行此操作。因为初始化必须是const或在编译时已知。看一本手册:
类成员变量称为“属性”。你也可以看到它们 引用使用其他术语,如“属性”或“字段”,但 出于本参考的目的,我们将使用“属性”。他们是 使用关键字public,protected或private之一定义, 然后是正常的变量声明。 此声明可能 包括初始化,但这个初始化必须是一个常量 value - 也就是说,它必须能够在编译时进行评估 不得依赖于运行时信息才能进行评估。
但是使用constuctor是可行的方法:
class individual extends person {
protected $_fk_individual_person;
function __construct() {
$this->_fk_individual_person = $this->_pk_person;
}
}
答案 1 :(得分:2)
您需要在子类构造函数中执行赋值。
class B extends A{
function __construct() {
$this->_fk_individual_person = $this->_pk_person;
}
}