in reply to $foo->bar = 14;

lvalue methods are a questionable idea, at least if used universally.

an lvalue method just exposes a variable (ie the storage for) to the assignment, it runs b4 the assignment is done.

It gets no chance to validate the RHS, thus you could accidentally do:

$person->age = -1;
$person->name = '2/22/01';
$person->ssn = 'capt. bob';