Q:

php OOP: Doing something in a class's constructor vs calling a private method to do the same thing

When reading various tutorials I noticed these 2 different approaches and I'm curious about what is happening under the hood. 
The first approach does everything in the constructor- everything being setting up variables or in this case calling the class's method to do something. The second approach calls a private method in the constructor to do the same thing. When would one way be preferred over the other? I know micro optimization is evil, but on an academic level is it a little slower to call the private method?
Here is a code example (this is some zf2 code) with the first approach:
class LoginForm extends Form
{
    public function __construct($name = null) {
        // we want to ignore the name passed
        parent::__construct('login-form');

        $this->setAttribute('method', 'post');

        $this->add(array(
            'name' => 'username',
            'attributes' => array(
                'type'=> 'text',
            ),
            'options' => array(
                'label' => 'User Name',
            ),
        )); ...

VS this:
class LoginForm extends Form
{
    public function __construct($name = null) {
        // we want to ignore the name passed
        parent::__construct('login-form');

        $this->setAttribute('method', 'post');

        $this->addElements();
    }
    private function addElements() {
        $this->add(array(
            'name' => 'username',
            'attributes' => array(
                'type'=> 'text',
            ),
            'options' => array(
                'label' => 'User Name',
            ),
        )); ...

Don't understand why this was flagged. I didn't ask which way was better I saw something I didn't completely understand and wanted to hear some possible reasons for why one programmer might have done it one way while another did it the other way. The accepted answer was very helpful for me as it also pointed out how one method may be evident of possible design issues.

A:

A private function call in a constructor is a symptom of a code smell. Either the function is very long - which is why you wanted the function call in the first place - or the constructor is doing something which it shouldn't be doing.
In this case setAttribute and addElements seem to be setting some defaults for the object. There are other ways to achieve this.
Looking at this case in specific you could argue that LoginForm should not be a class. Instead you could have a function:
function create_login_form() {
    $form = new Form();
    $form->setAttribute("method", "post");
    // etc
    return $form;
}

Looking more closely at this code: it seems to be some kind wrapper for HTML which is .. questionable. HTML is pretty good at what it does. It's a DSL (Domain Specific Language). LoginForm strays too far from the original concepts of the DSL.
If you go one step further you get:
function create_login_form() {
    $form = new HTML_Element("form");
    $form->setAttribute("method", "post");
    // etc
    return $form;
}

This looks pretty reasonable to me.

