Можно ли создать экземпляр родителя абстрактного класса в потомке абстрактного класса в PHP? - PullRequest
1 голос
/ 09 января 2012

Надеюсь, название имеет смысл, и, надеюсь, мой вопрос тоже.

Поэтому мне нужно создать экземпляр класса Sql в начале каждой страницы моего сайта, чтобы у всех других классов был действительный ресурс mysql для выполнения запросов, обновлений и т. Д. Без создания нескольких объектов Sql. Однако в настоящее время мои классы расширяют абстрактный класс для различных реализаций функций, основанных на контексте класса.

Вопрос: Могу ли я использовать потомок абстрактного класса parent::_construct для обхода абстрактного суперкласса и создания экземпляра класса Sql, из которого выходит резюме?

EX.

class Sql {
    function _construct() {
        //get valid db resource
    }

    function query() {
        //// query code
    }
}

abstract class Display extends Sql {
    function show() {
       return $this->displayRecipe();
    }        

    abstract function getRecipe();
}


class Members extends Display {
    function __construct() {
        parent::__construct();

    }

    function getRecipe($member_id) {
        return $this->query("select * from recipes where member=$member_id");
    }
}

Как видите, я не могу использовать function query() класса Sql, который сейчас является классом для родителей. Тем не менее, с абстрактным классом посередине, это вызовет исключение и сломается?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Код, который вы опубликовали, должен нормально работать, потому что конструктор в классе Members будет запускать конструктор родительского элемента parent::__construct(), который будет запускать конструктор в Sql, потому что __construct не перегружается в классе Display.

Надеюсь, я объяснил это достаточно хорошо, но попробуйте :) Просто убедитесь, что у вашего метода construct есть два подчеркивания в классе Sql; в коде, который вы разместили, есть только 1.

1 голос
/ 09 января 2012

Да, это будет работать:

Class Person{
    public $age;
    public $name;
    public $school;
    public function __construct($age,$name,$school){
        $this->age = $age;
        $this->name = $name;
        $this->school = $school;
        echo "It works!";
    }
}


abstract class Student extends Person{
}

class UniversityStudent extends Student{

    public function __construct($age,$name,$shcool){
        parent::__construct($age,$name,$school);
    }
}

$x = new UniversityStudent(20,"Paul","ULA");

echo $x->age;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...