@TempNickname

Как вызвать метод одного объекта из другого объекта?

Недавно начал учить ООП в PHP, и при применении знаний на практике возникла проблема. Допустим, у меня есть класс MySQL для соединения с базой данных, и есть другой класс, назовем его Page, где вызывается метод класса MySQL.

class MySQL {
public $Vars;

function Connect () {
//code
}
}

class Page {
public $Vars;

function Func () {
$MySQL->Connect();
//code
}
}

$MySQL = new MySQL;
$Page = new Page;

$Page->Func()


Сильно подозреваю, что не понял концепцию ООП. Каким образом можно вызвать метод Connect класса MySQL, без постоянного создания объектов класса MySQL в каждом методе класса Page? Или каким образом вообще реализовать подобную систему?
  • Вопрос задан
  • 2483 просмотра
Решения вопроса 2
например создавать объект класса MySQL в конструкторе класса Page и обращаться к нему во всех функциях
class MySQL
{
    public function connect()
    {
        // code...
    }
}

class Page 
{
    protected $mysql = null;

    public function __constuct()
    {
        $this->mysql = new MySQL;
    }

    public function view($id)
    {
        $this->mysql->where($id);
    }

    public function delete($id)
    {
        $this->mysql->delete($id);
    }
}

$page = new Page;
$page->view($id);
$page->delete($id);
Ответ написан
Как один (точнее два) из вариантов:
class MySQL 
{
    public function connect () 
    {
    //code
    }
}

class Page 
{
    protected $_mySql;

    //можно передавать экземпляр класса MySQL в конструктор класса Page

    public function __construct(MySQL $mySql = null)
    {
        $this->_mySql = $mySql;
    }

    // а можно создать для этого отдельный метод

    public function setMySql(MySQL $mySql)
    {
        $this->_mySql = $mySql;
    }

    public function func () 
    {
        $this->_mySql->Connect();
        //code
    }
}

$mySql = new MySQL;
$page1 = new Page($mySql);
$page2 = new Page();
$page2->setMySql($mySql);

$page1->func();
$page2->func();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы