PHP5. Необходимость явного указывания конструктора

Посмотрите на следующий класс

class Tester {
      
        // tester name
        private $name;
        

        // set tester name
        public function tester($name = 'undefined') {
            $this->name = $name;
        }
 

 }

Да, структура его очень проста, обратите внимание на метод tester, допустим, что мы хотим так запроектировать этот класс, чтобы tester был именно методом, который будет устанавливать текущее имя тестера. Если попробовать инстанцироваться от этого класса, то это приведет к вызову данного метода, так как в данном контексте он будет восприниматься как конструктор, и это несмотря на то, что метод прописан строчно в отличии от имени класса, это отголоски более старых версий PHP. Чтобы все же решить нашу задачу, необходимо в обязательном порядке указывать конструктор


class Tester {
      
        // tester name
        private $name;
      
        public function __construct() {}
      
        // set tester name
        public function tester($name = 'undefined') {
            $this->name = $name;
        }
 

}

или лучше так

class Tester {
      
        // tester name
        private $name;
      
        public function __construct($name = 'undefined') {
            $this->tester($name);
        }
      
        // set tester name
        public function tester($name = 'undefined') {
            $this->name = $name;
        }
 

}

Вот пример реализации данного класса

class Tester {
       
        // tester name
        private $name;
        // break
        private $br;
       
        public function __construct($name = 'undefined') {
            $this->tester($name);
            $this->br = "<br/>";
        }
       
        // set tester name
        public function tester($name = 'undefined') {
            $this->name = $name;
        }
       
        // get tester name
        public function getName() {
            echo "{$this->name}{$this->br}";
        }

 } 


$tester = new Tester();
$tester->getName(); // undefined
$tester->tester('Ivan');
$tester->getName(); // Ivan
$tester->tester('Petya');
$tester->getName(); // Petya
$tester->tester('Misha');
$tester->getName(); // Misha