Как получить экземпляр одноэлементного PHP-класса при его расширении? - PullRequest
1 голос
/ 29 мая 2011

У меня есть определенный класс в моем проекте, который используется для загрузки и хранения всего остального, например, библиотек и модулей.

Например;

index.php
---------
require_once "Libs/Damn.php";
$damn = Damn::getInstance();

// Initialize the URI class for handling user's request.
$damn->load('URI');
$damn->load('Modules');
$damn->load('Views');

if($damn->URI->module){
    $damn->Modules->load($damn->URI->module);
} else {
    $damn->Modules->load('main');
}

Это просто загрузка библиотеки 3 и поискдля имени модуля в URL.Если он не может найти, он загрузит модуль с именем "main" (main.php).

Вот проблема;

Когда я расширяю класс Damn в main.PHP, я не могу получить доступ к загруженным библиотекам, таким как URI, модули, но я хочу.Кажется, что расширение одноэлементного класса не получает экземпляр класса, а просто копирует его.

Я хочу иметь возможность использовать класс модуля, подобный этому;

main.php
--------
<?php
if (!defined('SECURED')) die('Access denied.');

class Main extends Damn {

    public function __construct() {}

    public function index() {
        $this->Views->load('test'); //Views library already loaded when Damn initiated.
    }

    public function __destruct() {}

}

?>

1 Ответ

0 голосов
/ 29 мая 2011

Ты на самом деле не расширяешь Черт.Вы создаете новый класс, который выходит из Damn.На ваш исходный класс это не влияет, и данные в экземпляре синглтона волшебным образом не копируются в новый класс.

Лучшее (хорошо, «хорошее») решение здесь - это не расширять Main от Damn, носоздайте новый главный класс, который использует Черт для управления моделями.

Нелогично изменять тип экземпляра синглтона на основе свойства более раннего экземпляра синглтона.Это пахнет как плохой дизайн:)

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