I remember reading an online article stating that void methods are poor programming practice and that every method needs to return something. He makes a good point, although apparently methods with return-values can cause more benchmark issues. One possible usage I can see from converting void methods into standard methods is when it comes down to domain model's setter methods. Consider the User class below, with setter methods returning $this the client code may look more elegant to some people since it enables method chaining:

PHP Code:
public class User extends DomainModel{
    protected 
$id// getter/setter for id property are defined in DomainModel class...
    
protected $username;
    protected 
$password;
    protected 
$email;

    public function 
getUsername(){
        return 
$this->username;
    }
    
    public function 
setUsername($username){
        
$this->username $username;
        return 
$this;
    }

    public function 
getPassword(){
        return 
$this->password;
    }
    
    public function 
setPassword($password){
        
$this->password $password;
        return 
$this;
    }

    public function 
getEmail(){
        return 
$this->email;
    }
    
    public function 
setEmail($email){
        
$this->email $email;
        return 
$this;
    }
}

$user = new User(1);
$user->setUsername("Admin")->setPassword("000000")->setEmail("admin@yoursite.com"); 
But I do not see this being applied widely in any PHP frameworks, so I assume there are some severe disadvantages(perhaps more than just benchmark concerns?) to having setter methods returning the object itself($this). Is it a poor OOP practice to have Domain Model's setter methods returning $this? If so, what are the problems? Id like to learn about them, and thx.