【发布时间】:2016-12-27 00:31:06
【问题描述】:
我试图弄清楚为什么控制器类无法访问它扩展的父级的属性。
使用 $this 检索运输方式不会输出任何结果。 var_dump 表示它是一个字符串长度为 0 的数组。
使用 parent:: 返回错误“未定义的类常量 'shipinfo'”
知道我做错了什么吗?我认为扩展父类时可以访问公共/受保护的变量?
$data = trim(file_get_contents('php://input'));
$link = new OrderLink($data);
$controller = new OrderLinkController();
class OrderLink{
protected $shipinfo = [
'name' => '',
'address' => '',
'unit' => '',
'city' => '',
'state' => '',
'country' => '',
'zip' => '',
'phone' => '',
'email' => '',
'method' => ''
];
protected $items;
function __construct($postdata)
{
$xml = simplexml_load_string($postdata);
$xml = $xml->Order;
$billinfo = $xml->AddressInfo[1];
$this->shipinfo['name'] = strval($billinfo->Name->Full);
$this->shipinfo['address'] = strval($billinfo->Address1);
$this->shipinfo['unit'] = strval($billinfo->Address2);
$this->shipinfo['city'] = strval($billinfo->City);
$this->shipinfo['state'] = strval($billinfo->State);
$this->shipinfo['country'] = strval($billinfo->Country);
$this->shipinfo['zip'] = strval($billinfo->Zip);
}
}
class OrderLinkController extends OrderLink
{
function __construct(){
echo 'Shipping Method: ' . $this->shipinfo['method'];
echo parent::shipinfo['method'];
if ($this->shipinfo['method'] == 'Local Pickup'){
$this->shipinfo['method'] = 'Pickup';
}
}
}
【问题讨论】:
-
您正在覆盖子类中的父类 __construct() 方法。
-
那么如果我从子节点中移除构造函数,变量就可以访问了?
-
@Query - 不,你不需要删除构造函数,请看下面我的回答,我已经添加了一个进一步的注释来详细解释这个概念