Параметризованный конструктор Каскадирование - PullRequest
0 голосов
/ 24 июня 2009

Рассмотрим следующую ситуацию

class URISplit {

    var $REQ_URI;

    //some more variables

    function __construct($uri) {
        //some code
        $this->REQ_URI = $uri;
        //some code yet again
    }
}

и следующие

class URIResolve extends URISplit {

    //some variables

    function __construct($uri) {
        //some code
    }
}

и еще один

class PageControl extends URIResolve {

    //some variables

    function __construct($uri) {

        //some more code

    }
}

и теперь следующее утверждение

$page = new PageControl($_SERVER['REQUEST_URI']);

будет ли это утверждение обеспечивать правильное построение всех классов.

Другими словами, будут ли конструкторы class URISplit и class URIResolve использовать строку, предоставленную конструктору class PageControl, и выполнить правильную конструкцию.

Моя цель - просто создать объект class PageControl, расслабиться и посмотреть, как он выполняет свою работу. Работа означает ->

  1. разделение URI (сделано class URISplit)
  2. разрешение (где получить данные для того, что спрашивается, то есть, сообщение, страница, новости или что-то еще) (сделано class URIResolve)
  3. загрузка соответствующих заголовков, страниц и других компонентов страницы (выполняется с помощью функций class PageControl

Уф! Длинный вопрос!

Ответы [ 2 ]

3 голосов
/ 24 июня 2009

Я думаю, что вы должны добавить вызовы к родительскому конструктору, как описано в http://php.net/manual/en/language.oop5.decon.php

class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}
2 голосов
/ 24 июня 2009

Вы должны явно вызывать родительский конструктор из дочернего. Взгляните на этот сайт для примера.

Причина в том, что дочерний класс может выбрать для родительского конструктора несколько других аргументов.

Черт, даже возможно иметь

class SOSplit extends URISplit {
    function __construct() { 
        parent::__construct( "http://stackoverflow.com" );
    }
}

class URIResolve extends URISplit {

    //some variables

    function __construct($uri) {
        parent::__construct( $uri);
    }
}
...