глобальные переменные

e2site

Новичок
глобальные переменные

для начало код:

PHP:
interface iCheck{
    function check($Arr);
}

class myGet implements iCheck{
    function check($Arr) {
        return $Arr;
    }
}


class myPost implements iCheck{
    function check($Arr) {
        return $Arr;
    }
}


class RequestTest {
    protected $Check;

    function RequestTest(iCheck $check){
        $this->Check = $check;
    }

    function testCheckRequest() {
        return $this->Check->check($_GET);
    }

  }

$mGet = new myGet();
$mReqG = new RequestTest($mGet);

$mPost = new myPost();
$mReqP = new RequestTest($mPost);
Вопрос как можно сделать переменные $mReqG и $mReqP доступными в любом месте программы не делая их глобальными.
 

zerkms

TDD infected
Команда форума
сделать функцию

PHP:
function getMReqG()
{
static $mReqG;
if (is_null($mReqG)) {
$mGet = new myGet();
$mReqG = new RequestTest($mGet); 
}

return $mReqG;
}
и в любом месте программы получать с помощью неё нужную переменную.
 

zerkms

TDD infected
Команда форума
e2site
для красоты можешь оформить класс с двумя статическими методами, чтобы не плодить функции.
 

Духовность™

Продвинутый новичок
а почему именно функцию? Нельзя ли в любом месте программы вызвать RequestTest::getInstance ?
 

damngood

Мозг был, но ушел...
PHP:
class xxx {

    private function __construct() {}
 
    private function __clone() {}

    static private $instance = null;

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new XEngine();
        }
        return self::$instance;
    }
 
    public function doAction() {
        //...
    }
}
Зовется Singleton.
Вызываешь как xxx::getInstance();
 

zerkms

TDD infected
Команда форума
triumvirat
потому что у него сложная инстанциация. у него конструктор объекта параметризован.
предлагаешь внести эту зависимость в конструктор класса RequestTest?
удачи :)
 

Духовность™

Продвинутый новичок
а, ну да. У меня такая же проблема была с Database::getInstance()

решилась использованием ini_set('mysql.default_...', '...'); - по сути, те же глобалсы)
 
Сверху