Q:

Can't Access Parent Variable from Child Object

I'm trying to figure out why the controller class is unable to access the properties of the parent it extends. 
Using $this to retrieve the shipping method outputs nothing. Var_dump says it is an array with a string length of 0. 
Using the parent:: returns error "Undefined class constant 'shipinfo'"
Any idea on what I am doing wrong? I thought public/protected variables can be accessed when the parent class is extended?
$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';

        }
    }
}

A:

A couple of small problems:

You need to call the parent constructor, so you should flow the $postdata needed into the parent through the child (or create it within the child constructor)
You can use $this-> for shipinfo
class OrderLinkController extends OrderLink
{

    function __construct($postdata){

        parent::__construct($postdata);

        echo 'Shipping Method: ' . $this->shipinfo['method'];
        echo $this->shipinfo['method'];

        if ($this->shipinfo['method']    == 'Local Pickup'){
           $this->shipinfo['method']    = 'Pickup';

        }
    }
}

Further note: You do not need to instantiate both the parent and child, as you did in the first few lines:
$link = new OrderLink($data);
$controller = new OrderLinkController();

You should only instantiate the child, sending the data through the child's constructor, once the child's constructor has matched the parent's allowing for the data to flow (see the code I provided above for how this works):
$controller = new OrderLinkController($data);

A:

I would also add to Katie's answer, that beside the problem with the code itself, there is also a problem with classes structure.
Classes you have are typical to web applications, the OrderLinkController is a class which is responsible for incoming requests handling - get the input data, validate it and pass in execution to the business logic object, the Model.
In this case the OrderLink is the Model and there should be no parent-child relation between it and the controller. They should stay independent, I would start with modifying the code this way:
// it may extend some BaseController class, but not the model class
class OrderLinkController 
{

    function run() {
        // get and parse the input data
        $data = trim(file_get_contents('php://input'));  
        $xml = simplexml_load_string($data);
        $xml = $xml->Order;
        // validate the data
        if ($xml->method == 'Local Pickup'){
            $xml->method = 'Pickup';
        }
        // pass the data to the model
        $model = new OrderLink($xml);
        // save the data or do something else with it
        $model->save(); 

        echo $model->getShippingInfo();
    }
}

class OrderLink{

    // it is usually better to have explicitly defined fields
    // rather than an array
    protected $name;
    protected $address;
    protected $unit;
    protected $city;
    protected $state;
    protected $country;
    protected $zip;
    protected $phone;
    protected $email;
    protected $items;

    // model gets already parsed data
    function __construct($data)
    {
        $billinfo = $data->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);
    }

    public function getShippingInfo() {
        return 'Shipping Method: ' . $this->method;
    }
}

// create and run the controller
$controller = new OrderLinkController();
$controller->run();

