Я постараюсь объяснить себе наилучший путь. Я пытаюсь начать с ООП в PHP. Я начал этот путь, я создал «главный контроллер» с конструкцией, где я инициировал все мои другие контроллеры. Я сделал это, потому что я надеялся поделиться данными по контроллерам.Настройка классов контроллера правильным способом
class clsController{
public function __construct($smarty){
if (is_object($smarty)) {
$this->o_smarty = $smarty;
} else {
throw new Exception("Smarty not set!");
}
$this->o_clsSharedAdsController = new clsSharedAdsController($this->o_smarty);
$this->o_clsSharedUserController = new clsSharedUserController($this->o_smarty);
}
}
Пока, на мой взгляд, это выглядит довольно оке. Теперь дело в том, когда я нахожусь в классе clsSharedUserController, который выглядит следующим образом:
class clsSharedUserController extends clsController{
// construct
public function __construct($smarty) {
if (is_object($smarty)) {
$this->o_smarty = $smarty;
} else {
throw new Exception("Smarty not set!");
}
}
}
Я не могу получить доступ к функции в clsSharedAdsController. Контроллер выглядит так.
class clsSharedAdsController extends clsController{
// construct
public function __construct($smarty) {
if (is_object($smarty)) {
$this->o_smarty = $smarty;
} else {
throw new Exception("Smarty not set!");
}
}
// ad details used for messages
public function getAdDetailsForMessage($ads_id){
echo $ads_id;
}
}
Я пытаюсь сделать доступ к нему следующим образом
class clsSharedUserController extends clsController{
// construct
public function __construct($smarty) {
if (is_object($smarty)) {
$this->o_smarty = $smarty;
} else {
throw new Exception("Smarty not set!");
}
}
// ad details used for messages
public function getUserReviews($userReviews){
$this->o_clsSharedAdsController->getAdDetailsForMessage(1);
}
}
Чтобы быть честным, я ожидал, чтобы получить мой 1 эхо-е изд, но я получаю эту ошибку:
Fatal error: Uncaught Error: Call to a member function getAdDetailsForMessage() on null in /home/vhosts/gamermarket.nl/httpdocs/includes/controllers/shared/clsSharedUserController.php:124
Stack trace:
#0 /home/vhosts/gamermarket.nl/httpdocs/includes/controllers/shared/clsSharedUserController.php(68): clsSharedUserController->getUserReviews(Array)
#1 /home/vhosts/gamermarket.nl/httpdocs/includes/controllers/clsReviewController.php(17): clsSharedUserController->getUserReviewsFromUsersId('0000000001')
#2 /home/vhosts/gamermarket.nl/httpdocs/reviews.php(10): clsReviewController->getReviews()
#3 {main} thrown in /home/vhosts/gamermarket.nl/httpdocs/includes/controllers/shared/clsSharedUserController.php on line 124
Я использую класс PDO для своих запросов, чтобы получить данные, которые они настроены так же, как этот clsController. Я, вероятно, теряю некоторую логику для правильной настройки для обмена моими данными по всем классам без создания новых экземпляров все время. Вы должны просто сделать один экземпляр класса и поделиться им среди других классов, а не?
Вы не ставим '$ this-> o_clsSharedAdsController' ни к чему в' clsSharedUserController'. Я не знаю, чего вы ожидаете, но если вы не установите/не инициализируете его, у него не будет никаких методов или данных. : P – yivi
Когда я делаю то, что получаю: Неустранимая ошибка: Разрешенный размер памяти 134217728 байт исчерпан (пытался выделить 262144 байт) в /home/vhosts/gamermarket.nl/httpdocs/includes/controllers/shared/clsSharedUserController.php on line 6 – poNgz0r