Всем доброго времени суток подскажите мне пожалуйста уже пол дня голову ломаю и вычитать ни где не могу что не так. Я проходил курс ООП полиморфизм. И вот пример того крутого человека что он написал, сделал так же как и он но у меня не работает... файл classes.php Код (PHP): <?php class publication { public $id; public $title; public $date; public $short_content; public $content; public $preview; public $author_name; public $type; public function _construct($row) { $this->id = $row['id']; $this->title = $row['title']; $this->date = $row['date']; $this->short_content = $row['short_content']; $this->content = $row['content']; $this->preview = $row['preview']; $this->author_name = $row['author_name']; $this->type = $row['type']; } } $obj1 = new publication; echo $obj1->title; class NewsPublication extends publication { public function printItem() { echo '<div style="width:600px; margin:0px auto;">'; echo '<h1 style="text-align:center; font-size:18px;">Новость: '.$this->title.'</h1>'; echo '<p style="text-align:leftt>"<img src="'.$this->preview.'" /></p>'; echo '<pre style="color:#333333; text-align:center; font-size:14px; ">'.$this->short_content.'</pre>'; echo '<p style="font-size:12px; text-align:right; color:#dedede;"><i>'.$this->author_name.'/'.$this->date.'</i></p>'; echo '<hr>'; echo '</div>'; } } class PhotoReportPublication extends publication { public function printItem() { echo '<div style="width:600px; margin:0px auto;">'; echo '<h1 style="text-align:left; font-size:18px;">Новость: '.$this->title.'</h1>'; echo '<p style="text-align:center>"<img src="'.$this->preview.'" /></p>'; echo '<pre style="color:#333333;text-align:left; font-size:14px; ">'.$this->short_content.'</pre>'; echo '<p style="font-size:12px; text-align:right; color:#dedede;"><i>'.$this->author_name.'/'.$this->date.'</i></p>'; echo '<hr>'; echo '</div>'; } } class ArticlePublication extends publication { public function printItem() { echo '<div style="width:600px; margin:0px auto;">'; echo '<h1 style="text-align:right; font-size:18px;">Новость: '.$this->title.'</h1>'; echo '<p style="text-align:right>"<img src="'.$this->preview.'" /></p>'; echo '<pre style="color:#333333; text-align:right; font-size:14px; ">'.$this->short_content.'</pre>'; echo '<p style="font-size:12px; text-align:left; color:#dedede;"><i>'.$this->author_name.'/'.$this->date.'</i></p>'; echo '<hr>'; echo '</div>'; } } ?> затем файл data.php Код (PHP): <?php include '../../db_connect.php'; require_once 'classes.php'; $publications = array(); $request = 'SELECT * FROM publication ORDER BY id DESC'; $result = mysqli_query($connect_db, $request); while ($row = mysqli_fetch_array($result)) { $publications[] = new $row['type']($row); /* Мне кажется здесь собака зарыта... не передаётся данный массив $row в файл classes.php в класс publication в конструктор*/ } ?> ну и третий файл publication.php Код (PHP): <?php require_once 'data.php'; foreach ($publications as $item) { echo $item->printItem(); } ?> Только один момент у меня версия php 5.2
Я так понимаю, что ты учишь ещё язык. Знаешь что сейчас последняя версия PHP 7? Или тебе специально под 5.2 нужно писать код?
Да есть движок и он 5.2 на нём все мои проекты... Пока не могу перепрыгнуть с него, и переделать его под 5,6 и выше не в состоянии пока что. В связи с этим мой сервер в интернете настроен и на нём старая версия php 5.2 =( Можете подсказать как правильно мне передать массив $row в файл в класс publication... ?) Буду чрезмерно благодарен, заодно буду понимать различия версий... Пригодится.
Код (PHP): $publications[] = new publication($row); https://php.net/manual/ru/language.oop5.decon.php#object.constructvoid __construct ([ mixed $args = "" [, $... ]] ) тут дали понять, что в конструктор как и с методами/функциями, можно использовать аргументы
Заменил не помогло, только ошибку выдало, ошибок то нет при использовании того кода. Просто в classes.php не попадет массив в класс. Код (PHP): while ($row = mysqli_fetch_array($result)) { $publications[] = new $row['type']($row); // часть с new $row['type'] - это работает подставляется имя класса из базы тут то работает, а вот часть ($row) как то не пашет здесь может что то должно быть подругому чтобы записать данные в массив, там должны подставляться наименование класса и передоваться в него массив $row, из базы. } Добавлено спустя 9 минут 9 секунд: Массив я получае в date.php вывод на экран массива из базы есть... Мне нужно теперь это массив в classes.php получить... быть может я не правильно получаю массив в classes.php и это не правильная запись? Код (PHP): public function _construct($row)
Да массив $row с записями существует я его вывел он есть в любом файле вылазит вопрос как конструктору сообщить что все переменные лежат в массиве $row :?
видимо не совсем понимаешь эту запись... (( давай тогда поступим так, сделай var_dump $row['type']($row)... Так быстро все вопросы отпадут (
Смотрите я открываю publication.php код выше написан. и там же вывожу с помощью полиморфизма, функцию Код (Text): printItem(); которая находится в файле classes.php код тоже выше его есть, вот эта функция по идее выводит мне новости из бд. А файл data.php отвечает за запрос к бд, и выборку с помощью цикла, дальше запихиваю всё это в массив publications в data.php . короче суть в том что я не передаю в функцию конструктора агремент $row который по идее должен являться массивом, а он туда не передатся так как в функцию не поступают значения из него ! я вывожу ниже класса с помощью обьектов не выводит не чего там пустота как будто туда и не вошло не чего. Код (PHP): class publication { public $id; public $title; public $date; public $short_content; public $content; public $preview; public $author_name; public $type; public function _construct($row) { //всё массив вроде должен быть но я не получаю значений его. $this->id = $row['id']; $this->title = $row['title']; $this->date = $row['date']; $this->short_content = $row['short_content']; $this->content = $row['content']; $this->preview = $row['preview']; $this->author_name = $row['author_name']; $this->type = $row['type']; } } $obj1 = new publication; echo $obj1->title; // тут пустота не выводит он не фига (((( Добавлено спустя 1 минуту 57 секунд: ошибка синтаксиса
$publications[] = new $row['type']- здесь подставляется из базы данных наименование тип, в точности такой же как и в у меня наименования класса а затем запись в скобках ($row) по идее должна забить туда массив с данными $row на каждой итерации цикла; запись добавляет в массив данные из бд. Добавлено спустя 1 минуту 6 секунд: а как в 5.2 правильно внести массив данных, это запись как в 5.5 делают или где почитать про это не могу мануал конкретно по 5,2 массивов найти
Ахах... Да ему вообще всё равно, а я не бось просто не правильно пытаюсь массив в массив положить если это вообще возможно... я не знаю
могу предложить разбить эту строку $row['type']($row) на две строки (; думаю, тогда вы найдете общий язык ((
Я попробовал задать строковое значение переменной ситуацию не спасло Код (PHP): $name = $row['type']; strval($name); echo $name; $publications[] = new $name($row); Предлагай, я уже без понятия что делать ....
askanim, каждый шаг отлаживай. В слепую ты ничего не сделаешь. Метод тыка он такой, что в тупик может загнать.
Есть же классы этих объектов... По ним создаются объекты конструкцией/ Код (PHP): class class_obj { public $run; public function _construct ($run) { $this->run = $run; } } obj1 = new class_obj(10); Правильно ведь всё написал... Так у меня всё тоже только значеняи из базы подставлятсья должны но не подставляются...
если бы ты правильно написал и правильно думал, как php машина - то у тебя бы ща всё работало бы... но увы... ты что-то не до конца охватываешь... Советую, если запарился - пойти отдохнуть (;
у меня 5 утра мне блин хочется сделать чтобы работало а потом спать упасть честно... Добавлено спустя 42 секунды: Уже даже так попробовал... Код (PHP): while ($row = mysqli_fetch_array($result)) { $row = array ($row['id'], $row['title'], $row['date'], $row['short_content'], $row['content'], $row['preview'], $row['author_name'],'type' => $row['type']); $publications[] = new $row['type']($row); } как масло масленное какое то