Боюсь у вас все как то переусложнено.
Классы в php это набор функций и переменных, при наследовании создается копия класса, в котором заменяются методы из потомка в наследнике, это касается так же методы конструктор и деструктор. Т.е. автоматически будет вызван только последний одноименный метод в цепочке наследования.
Соответственно виртуальных методов нет, точнее они работают так автоматически, т.е. можно считать все методы виртуальными.
И да, все что касается методов и их наследования скорее всего сделано однократно, в момент компиляции, а в момент создания экземпляра объекта в него копируются методы и переменные из этого сохраненного.
Деструктор будет вызван если закончится работа приложения, закончатся ссылки (это кстати не факт, висячие могут жить до конца приложения, и даже unset не вызовет деструктор если есть ссылки на объект) и закончится область видимости переменной в которую поместили объект.
пример:class A
{
public $a;
function __construct(){echo '{C}';}
function __destruct(){echo '[';unset($this->a);echo 'D]';}
}
echo 1;
$a=new A();$b=new A();
$b->a=$a;$a->a=$b; // закоментируй, тогда деструктор будет вызван до вывода 2 иначе после
unset($a);unset($b);
echo 2;
если есть ссылки:
1{C}{C}2[[D]D]
если ссылок нет:
1{C}{C}[D][D]2