Посмотрите на следующий класс
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