Change the value of a protected variable for child class

You're not redefining the variable, you're just setting it in the parents constructor. Call it and you've got what you need (see the comment in the code, it's one line only):

<?php
class MyClass
{
    protected $variable = 'DEFAULT';

    function __construct($newVariable)
    {
        $this->variable = $newVariable;
        echo $this->variable;
    }
}
class OtherClass extends MyClass
{
    function __construct()
    {
        parent::__construct(); # <<--- do this
        echo $this->variable;
    }
}

$foo = new MyClass('MODIFIED'); // Output : MODIFIED
$bar = new OtherClass(); // Output : MODIFIED
?>

Even if you have two classes definition, the concrete instance will always be of one class. That one class can inherit from a parent class, but if you override methods (like you did with the constructor), the parents class method will not be called because it has been overridden. However with the parent keyword you can access a parent's method from within the child.