Я пытаюсь получить доступ к общедоступному методу из класса из функции в другом классе, который у меня есть:
Файл с основными функциями
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);
}
}
но могу ли я сделать это более безопасным?
Внедрить экземпляр 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);
Я сделал это со ссылкой на функцию. бывший
function ClassName(){
if(!isset($GLOBALS["ClassName"]))
$GLOBALS["ClassName"] = new $GLOBALS["ClassName"];
return $GLOBALS["ClassName"];
}
И вы можете называть его
ClassName()->query("...");
откуда угодно ! : D
function Test(){ $kernel->query("Some query ") }