Как настроить глобальный защищенный класс php

0

Я пытаюсь получить доступ к общедоступному методу из класса из функции в другом классе, который у меня есть:

Файл с основными функциями

class kernel(){

private $conn;

private function mysqlconnection(){

$conn = new Mysqlconnection(); //Setup connection


}
private function makequery($query){

$this->conn->do_query($query); //do mysql query

}

public function query($query){

//check rank
...
 return $this->makequery($query); //if true do it

}

}

Файл шаблона функции приложения

Class app{

function __construct($appname){
//Check that this app can get connection (try make query)

$kernel->query($appname); 

}    

    }

$kernel = new kernel ();

$app = new app($appname); //HOW to access another class from class?

Я сделал это, назвав класс глобальными

$GLOBALS['kernel'] = new kernel();

и в классе приложений...

    Class app{

function __construct($appname){
//Check that this app can get connection (try make query)

$GLOBALS['kernel']->query($appname); 

}    

    }

но могу ли я сделать это более безопасным?

Теги:
class
global

2 ответа

1
Лучший ответ

Внедрить экземпляр kernal через конструктор

Class app{

    protected $kernal;

    function __construct($appname, $kernal)
    {
        $this->kernal = $kernal //if needed in other methods, save to a property
        $this->kernal->query($appname); 
    }    
}


$kernel = new kernel ();

$app = new app($appname, $kernal);
  • 0
    Да, но я также хочу получить доступ к нему из функций, и включение класса в каждую функцию было бы проблематичным.
  • 0
    function Test(){ $kernel->query("Some query ") }
Показать ещё 3 комментария
0

Я сделал это со ссылкой на функцию. бывший

function ClassName(){
if(!isset($GLOBALS["ClassName"]))
$GLOBALS["ClassName"] = new $GLOBALS["ClassName"];

return $GLOBALS["ClassName"];
}

И вы можете называть его

ClassName()->query("...");

откуда угодно ! : D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню