Nej, hvis du kalder A direkte, vil den ikke have adgang til WriteDesign().
$a = new A();
$a->WriteDesign(); // vil melde fejl.
Men hvis du bruger B, vil det virke fint. A har lige så meget adgang til B's metoder som B har til A's. I hvert fald så længe metode/property er enten public eller protected. Hvis den var private vil de ikke have adgang til hinandens.
Af samme grund bør A derfor være abstract, så den ikke kan kaldes direkte. Fordi den er afhængig af en specialicering, og derfor kun kan bruges til at extende specialicerede klasser (som f.eks. B).
Der er desuden et par småfejl i den oprindelige klasse, de er rettet herunder.
abstract class A {
protected $title = "test";
function Write()
{
$this->WriteDesign();
}
}
class B extends A {
function WriteDesign()
{
echo $this->title;
}
}
// B har nu adgang til alle A's metoder og kan derfor bruge i stedet for A.
$b = new B();
$b->Write();
$a = new A(); // vil give fejl, da A er abstract. Vi forhindrer derfor at den kan kaldes direkte, da den skal bruge nogle af metoderne fra de specialicerede klasser.
Prøv at test det hvis i er i tvivl :)
Man kan så gå videre med at lave WriteDesign() en abstract metode i A, så specialicerede klasser (f.eks. B) _skal_ have en WriteDesign metode for at kunne extende A. Men en ting ad gangen.
Hvis du/i har behov for lidt baggrundsviden om OOP i PHP, kan denne bog kraftigt anbefales:
http://www.amazon.co.uk/Objects-Patterns-Practice-Experts-Source/dp/143022925X/ref=sr_1_1?ie=UTF8&s=books&qid=1288186404&sr=8-1