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

  • Автор темы Автор темы e2site
  • Дата начала Дата начала

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 доступными в любом месте программы не делая их глобальными.
 
сделать функцию

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

return $mReqG;
}

и в любом месте программы получать с помощью неё нужную переменную.
 
e2site
для красоты можешь оформить класс с двумя статическими методами, чтобы не плодить функции.
 
а почему именно функцию? Нельзя ли в любом месте программы вызвать RequestTest::getInstance ?
 
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();
 
triumvirat
потому что у него сложная инстанциация. у него конструктор объекта параметризован.
предлагаешь внести эту зависимость в конструктор класса RequestTest?
удачи :-)
 
а, ну да. У меня такая же проблема была с Database::getInstance()

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