Это не то, как вы используете конструкторы, так как они ничего не возвращают.Вместо этого попробуйте следующее:
public function __construct() {
$dsn = 'mysql:dbname=' . MYSQL_DB . ';host=' . MYSQL_HOST;
$user = MYSQL_USER;
$pw = MYSQL_PW;
try {
parent::__construct($dsn, $user, $pw);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();;
}
}
ПРИМЕЧАНИЕ. Вы все еще можете столкнуться с проблемами, поскольку ваш конструктор не принимает те же аргументы, что и конструктор PDO.Одним из принципов ООП является эквивалентность, воплощенная в Принципе замены Лискова , что означает, что протокол (открытый API) подкласса должен быть строгим надмножеством своего суперкласса.Это важно по той причине, что если у подкласса есть API, который отличается от того, который представлен классом, от которого он наследует, то он не может быть использован для замены суперкласса во всех случаях.
Например, как бы вы использовали свой подкласс для подключения к базе данных PostgreSQL или использовали файл SQLite вместо mysql?Суперкласс PDO может работать со всеми тремя, наряду с другими бэкэндами базы данных, благодаря тому, что вы можете передавать DSN в качестве аргумента, но вы не можете сделать это с вашим подклассом.
Однако все это затрагивает аспекты информатики и несколько отходит от темы;)