Intereting Posts
Загрузка файла Blueimp jQuery, передача данных дополнительной формы Как отредактировать этот запрос MySQL, чтобы включить дополнительный столбец с count и avg? Сообщение было сброшено в CakePHP 2.2 Отправка нескольких вложений по электронной почте с помощью PHP Загрузка изображения с iOS на PHP php – Как перенаправить страницу с почтовыми данными Мне нужна помощь при отправке результатов jQuizzy через электронную почту PHP требует, чтобы файл из верхнего каталога Несколько маркеров на карте Google: отображается только последний маркер Соединение mysqli_query для уже подключенной страницы PHP Любые проблемы со следующей работой для php-ошибки # 53632 Получить строку запроса URL Доктрина MongoDB найти по id Загрузить изображение на сервер и сохранить путь к образцу в базе данных mysql Как убедиться, что пользователь не может прервать выполнение php-кода, вызванного «register_shutdown_function»?

Неправильно ли использовать html внутри php-класса?

что-то не так с использованием html внутри функции класса? Я называю это в DOM, поэтому мне не нужна строка, возвращаемая.

public function the_contact_table(){ ?> <div> some html here </div> <?php } 

Также, когда мне нужна строка, я использую этот метод? Есть ли лучший способ или это относительно стандарт?

 public function get_single(){ ob_start();?> <div class='staff-member single'> <div class='col left'> <div class='thumbnail'> thumbnail </div> <?php $this->the_contact_table(); ?> </div> <div class='col right'> </div> </div> <?php $content = ob_get_contents(); ob_end_clean(); return $content; } 

ОБНОВИТЬ

Я должен был объяснить, почему я это делаю. Я делаю плагин WordPress и хочу контролировать вывод типа сообщений. Поэтому я использую фильтр, как показано ниже.

 public function filter_single($content){ global $post; if ($post->post_type == 'staff-member') { $sm = new JM_Staff_Member($post); $content = $sm->get_single(); } return $content; } 

Итак, как вы можете видеть, я должен вернуть строку в ядро ​​wordpress

Вы должны использовать HEREDOC вместо буферизации вывода, если хотите сохранить длинную строку в переменной. Это выглядит так:

 $content = <<<EOD content here EOD; 

EOD может быть чем угодно, но обратите внимание на две важные вещи:

  1. У него не может быть пробелов перед ним, и он должен быть на собственной линии
  2. Это не должно быть строка, которая может быть найдена в вашем контенте

Если вы используете PHP> = 5.3, вам следует использовать NOWDOC, который не анализирует переменную внутри документа (если вам это не нужно). Единственным отличием от синтаксиса NOWDOC является то, что дозорчик заключен в кавычки:

 $content = <<<'EOD' content here EOD; 

Причина, по которой я отклонился от буферизации вывода, заключается в том, что он не позволяет серверу передавать данные, отправленные клиенту. Это означает, что запросы будут выглядеть медленнее, потому что вместо того, чтобы контент постепенно отправлялся клиенту и отображался, он вынужден быть отправлен сразу. Буферизация вывода – это взлом для ситуаций, когда функции небрежно echo данные вместо того, чтобы возвращать его или инструмент для определенных приложений с конкретной потребностью в нем. Я также предполагаю, что вы нанесли удар по времени выполнения, если вы использовали буферизацию вывода (потому что она включает вызовы функций) по сравнению с HEREDOCing в переменную или включающую представление.

Теперь, чтобы ответить на вопрос о том, подходит ли это, я бы сказал, что в приложении MVC весь HTML и другой контент должны содержаться в его собственном представлении. Затем контроллер может вызывать представление для отображения самого себя и не должен беспокоиться о знании кода, участвующего в отображении представления. Вы все равно можете передавать информацию (например, заголовки, авторы, массивы тегов и т. Д.), Но цель здесь – отделить контент от логики.

Тем не менее, шаблоны WordPress и код выглядят довольно неряшливо для начала и свободно, если вообще не реализуют MVC, поэтому, если слишком много работы для создания представления для этого, я бы сказал, что неряшливость будет соответствовать стилю WP.

Это не очень хорошая практика в отношении того, что вы отчуждаете разработчиков интерфейсов, размещая то, что на самом деле является «представлениями» внутри файлов классов PHP. Это была одна из моих самых больших проблем, когда я впервые начал использовать PHP в целом, это то, что я хотел динамически создавать контент внутри классов. Это отличная идея, но вы хотите сделать это таким образом, чтобы многие члены вашей команды могли работать вместе как можно более гладко;].

Вероятно, вы должны иметь содержимое внутри отдельного файла, называемого «staff-member-single.php», который вы затем вызываете в своей функции

 public function get_single(){ ob_start(); require_once('views/staff-member-single.php'); $content = ob_get_contents(); ob_end_clean(); return $content; } 

Вы бы реорганизовали это в метод многократного использования, хотя, так что это выглядело бы немного как ..

 public function get_single() { $string = $this->render_view_as_string('satff-member-single'); return $string; } public function render_view($view) { require('views/'.$view.'.php'); } public function render_view_as_string($view) { ob_start(); $this->render_view($view); $content = ob_get_contents(); ob_end_clean(); return $content; } . public function get_single() { $string = $this->render_view_as_string('satff-member-single'); return $string; } public function render_view($view) { require('views/'.$view.'.php'); } public function render_view_as_string($view) { ob_start(); $this->render_view($view); $content = ob_get_contents(); ob_end_clean(); return $content; } 

Я считаю хорошей практикой использовать PHP только для логики приложения и передачи некоторых данных для просмотра слоя (механизма шаблонов). В соответствии с этим существуют некоторые шаблоны, такие как MVC.