Не получается вывести новости из БД, подскажите, что не так делаю, совсем запутался есть у меня контроллер news.php: Код (Text): class News extends Controller { function __construct() { parent::__construct(); } public function index($arg = false) { $this->view->render('news/index'); } public function news_list($arg = false) { $model = new news_model(); $this->view->news_list = $model->news_list($arg); self::index(); } } есть модель news_model.php: Код (Text): class news_model extends Model { function __construct() { parent::__construct(); } var $arg = ''; var $dataNews; public function news_list($arg) { $myID = $arg; $this->db->exec('USE myBase;'); $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); if(isset($myID)) { //Если мы знаем ID новости $sth = $this->db->prepare("SELECT * FROM news WHERE id_news = :myID"); $sth->execute(array(':myID' => $myID)); } else { //Если мы не знаем ID новости $sth = $this->db->prepare("SELECT * FROM news"); $sth->execute(); } if($sth->rowCount() > 0) { $dataNews = $sth->fetchAll(); $this->get_news_list($dataNews); } else { header('location: ../../error'); } } public static function get_news_list($dataNews) { foreach ($dataNews as $key => $value) { echo $value['title_news']; } } } И отображение : Код (Text): echo news_model::news_list(); Не могу вывести $value['title_news'] в тело сайта, выводит ошибки: видимо я не до конца понимаю синтаксис? подскажите, что не так?
Re: Помогите побороть Call to a member function exec() on a Код (Text): echo news_model::news_list(null); Это по warning-у
Re: Помогите побороть Call to a member function exec() on a спасибо за коммент, а данный вариант это правильное решение или что-то типа "выключим все ошибки их не будет видно" ?
у тебя же не static метод, про это и пишется ошибка! видимо правильно будет вызывать так: Код (PHP): $news = new news_model(); echo $news->news_list(null); можно было бы переписать метод на public static function, но тогда надо истребить все $this внутри него, т.к. у статика нет никакого $this, он может обращаться только к static методам и переменным класса. решай сам как быть.
Re: Помогите побороть Call to a member function exec() on a ок, можно передать значение аргумента, которое получает Код (Text): public function news_list($arg) {...} Код (Text): echo $news->news_list(сюда); ?? может надо $arg сделать, типа глобальной переменной? ----------------------------- сделал так в модели: Код (Text): public function news_list($arg) { $GLOBALS['myID'] = $arg; // создаем суперглобальную переменную $myID = $arg; $this->db->exec('USE dskvrn_estate;'); //указываем активную базу данных и вызов делаю так: Код (Text): echo $news->news_list($GLOBALS['myID']); Что скажите, как такой подход? Добавлено спустя 21 минуту 21 секунду: Re: Помогите побороть Call to a member function exec() on a non- И еще момент. При выборке новостей, может быть три варианта: ID передан, новость есть ID передан, ID не существует, выводится ошибка ID не передан, выводим все новости Проверять наличие ID в базе, я так понимаю будем в модели. А вот проверять есть ли вообще ID, где лучше в контроллере или модели?
Re: Помогите побороть Call to a member function exec() on a глобальные переменные это кал. нет такой задачи, которая требовала бы globals. это жуткое наследие надо выжигать огнем. не усложняй. ты всё равно не чувствуешь где проводить разделительную черту, поэтому пофигу где. главное делай единообразно.
Re: Помогите побороть Call to a member function exec() on a А реестры в крупных сложносвязных не монолитных системах уже не используются? Это вот в интернете написано "globals - для дураков" и все так теперь говорят. Да, 9000 говнокодеров регулярно используют globals для создания var-помоек, которые в итоге перерастают в неконтролируемое жрущее память непредсказуемое убожие. Другие 9000 говнокодеров, дабы не быть лохами, не юзают globals - они делают статичные классы, которые по сути решуют ту же задачу - var-помойка. Однако ж не топор убил старушку, а Раскольников. Не вините инструменты за то, что балбесы не умеют их применять. Так, например, в интернете пишут, что PHP - язык для идиотов и школоло, просто потому что это один из немногих языков, доступных для освоения даже идиотам и школоло. Но знание синтаксиса и умение копипастить туторы не делает их программистами. А вы не становитесь идиотом. Так и глобальные переменные в любой реализации не являются калом. Есть хорошее правило - не делай [нужное вписать] ради [ранее вписанное]. Не надо делать MVC ради MVC. Паттерны - это не заповеди, а рекомендации по решению стандартных задач проектирования. Если в вашей ситуации вам нет острой нужды именно в MVC - не тратьте на это время.