Задать вопрос

Почему не работает конструктор класса?

В классе FilePath я формирую путь к файлу БД (оставил один путь, в реальности их больше).
В классе MyBase я использую эти пути.

Но, похоже, что конструктор базового класса не выполняется.
Слово work не отображается и при создании экземпляра класса MyBase (и вызове его конструктора) в поле SQLiteFilePath остается значение default
Почему не работает конструктор класса?

abstract class FilePath{

protected $SQLiteFilePath="default";

function __construct(){
echo "work"; // Не отображается
$this->SQLiteFilePath='base.db'; // Не присваивается полю выше
}}


class MyBase extends FilePath{

function __construct(){
echo $this->SQLiteFilePath; // default,. а должно быть base.db}
}
  • Вопрос задан
  • 248 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@sand3001
Всего по немногу
амечание: Конструкторы, определённые в классах-родителях, не вызываются автоматически, если дочерний класс определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, требуется вызвать parent::__construct() внутри конструктора дочернего класса. Если в дочернем классе не определён конструктор, то он может быть унаследован от родительского класса как обычный метод (если он не был определён как приватный).

Вот оригинал
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Читаем документацию, просвещаемся https://www.php.net/manual/ru/language.oop5.decon.php
Когда придет озарение, дописываем вызов родительского конструктора.

class MyBase extends FilePath{
  function __construct(){
    parent::__construct();
    echo $this->SQLiteFilePath; // default,. а должно быть base.db}
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы