Переменная $constraints принадлежит классу, не объекту.
Вы меняете ее вызовом A::noConstraints()
Теперь эта переменная false
Потом вы создаете объект на основе класса в котором эта переменная изменена.
По-моему всё логично.
UPD
Даже не так.
Неважно когда вы создаете объект.
Важно то, что в этом объекте вы обращаетесь к переменной класса, после ее изменения
С таким кодом должен быть аналогичный результат.
$b = new B;
$b->show(); // true
A::noConstraints(function() use($b) {
$b->show(); // false
});