Всем привет, есть очень навязчивое чувство, что я жестко наговнокодил Прохожу видео уроки, там дается домашнее задание, я не совсем его понял, посмотрите пожалуйста. Само задание: Создайте объект класса View, удовлетворяющий следующим требованиям: - Конструктор не имеет аргументов - Есть метод assign($name, $value), чья задача - сохранить данные, передаваемые в шаблон по заданному имени (используйте защищенное свойство - массив для хранения этих данных) - Есть метод display($template), который отображает указанный шаблон с заранее сохраненными данными - * Метод render($template), который аналогичен методу display(), но не выводит шаблон с данными в браузер, а возвращает его Мое творение: Код (Text): class View { protected $array; function __construct () { } public function assign ($name, $value) { $this->array = [$name => $value]; } public function display ($template) { foreach ($this->array as $key => $value) { print $key . ' ' . $value; } } public function render ($template) { foreach ($this->array as $key => $value) { return $key . ' ' . $value; } } }
Рааанооо вам ООП... Вы хоть задание поняли в чём состоит? Каким образом, скажите пожалуйста, вот это: соответствует вот этому: ? Задание простое, сделать за вас - 2 минуты, а толку для вас? 0... Вы поймите хотя бы, что от вас хотят. Чтобы вы передали сохранённые данные в существующий шаблон (иными словами, скрипт на php, не содержащий другой логики, кроме как вывод данных) и отобразили результат его работы. Там не написано отобразить имена и значения переданных переменных --- Добавлено --- Что по вашему делает эта строчка? Вы массивы не знаете, а лезете ООП учить...
Ну так если не поняли задание, спросили бы сначала смысл задания. Давайте начнём издалека. Расскажите в двух словах про работу с массивами. Затем про работу с классами. А потом - слышали ли вы вообще о разделении скрипта на логику отдельно, и шаблон вывода отдельно? И цитируйте нормально, не надо свои комментарии прямо внутри цитаты делать.
PHP: <?php class View { protected $array; public function __construct() { $name = $this->assign('kentkent7', 12); $this->template = 'Имя: ' . $name . ' и его значение: ' . $this->array[$name]; $this->display($this->template); $this->render($this->template); } function assign($name, $value) { $this->array[$name] = $value; return $name; } function display($template) { echo $template; } function render($template) { return $template; } } $object = new View(); Вот так что-ли?
Мне не у кого спрашивать Массивы - это переменные в области памяти, которые способны хранить набор данных. Виды: простые, двумерные, ассоциативные Код (Text): $array = [1, 2, 3]; $array = [[1, 2, 3 ]; $array = [ 1 => [1], 2 => [2], 3 => [3]]; php - является класс ориентированным языком программирования, присутствует механизм двойного наследования, при котором потомок принимает свойства и методы класса родителя. Также можно перекрывать родительские методы, дополнять, использовать конструкторы и деструкторы, создавать объекты классов в теле сторонних классов, использовать модификаторы доступа "инкапсуляция", ну и в целом есть вся основная парадигма: наследование, инкапсуляция, полиморфизм. Класс напоминает некий массив, но в отличие от массива класс имеет методы "свойства класса". Слышал про PDO, где необходимо разделять логику: одна часть прием данных, другая обработка, третья вывод. Я извиняюсь, болею и давно на форум не заходил.
у вас во втором массиве скобочка загуляла с проститутками. --- Добавлено --- Это расширение для работы с базами данных --- Добавлено --- что там за бред бредов ?
ловите говнософт, распродажа!! PHP: <?php error_reporting ( E_ALL ); if ( version_compare ( PHP_VERSION, '7.1.0', '<' ) ) { die ( 'Error: Please, update module PHP ver ' . PHP_VERSION . ' ver < 7' ); } class View { protected $a = [], $template; public function assign( string $name, int $value ) { if ( isset ( $this -> a[$name] ) ) throw new Exception( sprintf ( 'Заданное имя %s уже существует', $name ) ); $this -> a[$name] = $value; return $this; } public function template( string $s ) { $this -> template = $s; return $this; } public function output() { if ( empty ( $this -> template ) ) throw new Exception( 'Шаблон не задан' ); $string = ''; foreach ( $this -> a AS $name => $val ) { $string .= sprintf ( $this -> template, $name, $val ) . '<br>'; } return $string; } public function __toString() { return $this -> output(); } } ( $view = new View ) -> assign( 'kentkent7', 12 ) -> assign( 'mkramer', 708 ) -> assign( 'виталий032', 15 ) -> assign( 'MouseZver', 1 ) -> template( 'Школьник %s, ему %d лет' ); $lalki = $view -> output(); echo "ТУТ ВСЕ ЛАЛКИ:<br>{$lalki}"; /* или */ //echo $view; Код (Text): ТУТ ВСЕ ЛАЛКИ: Школьник kentkent7, ему 12 лет Школьник mkramer, ему 708 лет Школьник виталий032, ему 15 лет Школьник MouseZver, ему 1 лет --- Добавлено --- Само задание убогое, 20 века или каменного едритофоба создавшего эту логику без включения современности. Телепорт чтоль заюзал хоть выродок.
MouseZver, можешь, пожалуйста, объяснить что это за штука: Код (Text): ( $view = new View ) Это то же самое, что: Код (Text): $view = new View(); $view->assign('...', ...); .... ?
да, в укороченном стиле как подобие сжимания PHP: fputs($f=fopen('file.txt',"c+"),($a=fgets($f)-rewind($f)+1)+print$a); --- Добавлено --- зачем скобки если агрументы не передаются ?
@MouseZver, задание, ИМХО, про другое. Смастерить View-часть от MVC - т.е. передавать переменные в скрипт. Почти. Но похоже. Это чем же? Круто. Сколько слов понимаете из этого? Вот прямо экстремальная ситуация, я решил перезаписать значение в шаблоне....
итог не меняется. Передать в переменную или вывести инфу юзеру. прям супер пупер зашкваристая мега тру топ папка с жевачкой имба защита!
Он может хранить информацию, но я просто выражаюсь как могу)) По своей сущности, класс является некой абстракцией реального мира. Пока тяжко с инкапсуляцией, я просто не пойнимаю ей применение, но точнее понимаю, что она для безопасности хранения и передачи, но вообщем все сложно) Я немного переработал код, я думаю не идеально, но наверное лучше. Код (Text): class class View { protected $array = []; function __construct () { } public function assign ($name, $value) { $this->array[$name] = $value; } public function render($template) { { $temp = file_get_contents( __DIR__ ."\\$template" ); return $temp; } } public function display($template) { echo $this->render($template); } } --- Добавлено --- Вообщем стараюсь эволюционировать, а что там из меня вырастет, пока и сам не знаю
Ну это сново не то, что от вас требуется, хотя ближе... Переменные-то в шаблон никак не подставляются. Ладно, подскажу приём конкретно метода render, раз довёл уже почти до того, что нужно: PHP: public function render($template) { { ob_start(); extract($this->array); require __DIR__ . "/$template"; // не надо виндовый разделитель использовать, в основном на никсах сайты сидят return ob_get_clean (); } В принципе, традиционная такая реализация шаблоном. С вас - прочитать про все функции и инструкции, которые я использовал. Функции - просто щёлкайте в коде.
Вообщем стараюсь эволюционировать, а что там из меня вырастет, пока и сам не знаю Я тоже смотрел в сторону буфера, только думал, что данное решение неправильное))