在 php 类中使用 html 是否不好?

2023-12-23

在类函数中使用 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;
}

UPDATE

我应该解释一下我为什么这样做。我正在制作一个 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;
}

所以如你所见,我must返回一个字符串到 WordPress 核心


你应该使用HEREDOC http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.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 的风格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 php 类中使用 html 是否不好? 的相关文章

  • 在 Woocommerce 中设置购物车商品价格后重新计算总计

    通过 set price 方法更改产品价格后 如何更改小计价格 现在在review order php中按旧价格计算总成本 cart php foreach WC gt cart gt get cart as cart item key g
  • 允许跨域ajax请求

    在我的项目中 我需要允许其他人向我的脚本发送 ajax 请求 因此 外部请求可能来自其他网站和域 也可能来自浏览器扩展 我在脚本顶部简单地添加了这两行 让他们执行此操作 header Access Control Allow Origin
  • 这段 PHP 代码是否会导致其他人的 Apache 崩溃?

    preg match all a str repeat a 1000 matches 编辑 稍微更改正则表达式以使其更简单 同时仍然崩溃 我在 PHP 5 3 5 和 Apache 2 0 上运行它 它使服务器崩溃 如果我将 339 更改为
  • PHP 如果找到特定值范围,则从主数组中删除子数组

    假设我有以下数组 9 gt Array 0 gt Bob Smith 1 gt email protected cdn cgi l email protection 2 gt Helsinki 3 gt 10 4 gt 34 5 gt 20
  • PHP“按引用分配”的奇怪现象

    我发现了一个代码片段 其中包括 a b 但没有测试 b 是否确实存在 if isset b 我不确定 PHP 是如何处理这个问题的 所以我进行了一个快速的裸测试 现在我更加感兴趣了 a array a gt b x gt y b array
  • mysql数据库的“零知识”加密

    我一直在研究 Web 应用程序数据库层的加密 它使用MySQL 5 1 或更高版本 我记不清了 该应用程序由我的组织管理 为公共客户存储数据 最简单的选择是 AES ENCRYPT AES DECRYPT 如果坏人以某种方式访问 我的数据库
  • 如果 Woocommerce 单一产品中的库存数量少于 10,请在库存数量旁边添加文本

    我发现这是作为另一个线程的评论发布的 但我不知道应该用它做什么 if product gt get stock quantity lt 10 echo Limited supply left 我想它应该有一个钩子 我试过woocommerc
  • 恢复 woocommerce 订单

    最近 我的服务器团队更换了我的数据库 他们将我们以前的数据库放入其中 因此 我们丢失了某一天 特定日期 的订单详细信息 现在 服务器团队提供包含丢失当天订单详细信息的备份 现在请告诉我如何恢复这些订单 我无法用给定的备份替换我们的数据库 因
  • 为什么 Laravel 即使在本地环境也会重定向到 https?

    我正在开发 Laravel 5 5 版本 我有一个需要域才能执行的应用程序 这就是为什么 我在我的中添加了以下条目 etc hosts文件 以便我可以使用以下域打开我的应用程序仪表板 应用程序 dev or api application
  • 数组和foreach

    posts array message gt this is a test message foreach posts as post echo post message 为什么上面的代码只输出message中的第一个字母 t Thanks
  • 替换字符串中的重复字符串

    我正在尝试查找 并替换 字符串中重复的字符串 我的字符串可以是这样的 Lorem ipsum dolor 坐阿梅特坐 阿梅特坐 阿梅特坐诺斯特鲁德实习amit situllamco Laboris nisi ut aliquip ex ea
  • 查找定义类的 PHP 文件(在运行时)

    PHP 中是否有任何反射 内省 魔法可以让您找到定义特定类 或函数 的 PHP 文件 换句话说 我有一个 PHP 类的名称 或者一个实例化对象的名称 我想把这个传递给某物 函数 反射类等 将返回定义该类的文件系统路径 path to cla
  • 使用 Wikipedia API 查找文章的主要类别

    我有一个文章列表 我想找到每篇文章的主要类别 维基百科在这里列出了它的主要类别 http en wikipedia org wiki Portal Contents Categories http en wikipedia org wiki
  • 尝试加载 php_oci8.dll 时 PHP 启动时出现警告

    我正在使用 XAMPP 并尝试为 sql 配置 Oracle 连接 我取消了该行的注释extension php oci8 dll一开始出现错误 缺少oci dll 但后来我从Oracle网页下载了instantclient 我尝试过版本
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • php 32位日期解析1901年12月13日之前的日期

    我很高兴使用strtotime http www php net manual en function strtotime php在我的开发机器上解析日期 其中一些日期是 1800 年代 一个极端的例子是 1500 年代 但我的开发机是64
  • Laravel 搜索路由和控制器

    我正在构建我的第一个基本 Laravel Web 应用程序 在学习了一些教程之后 这是我自己修改的第一个应用程序 我在路由到控制器然后获取正确的网址时遇到了一些麻烦 理想情况下 此时我应该只有两条路线 and user 在主页上 您可以通过
  • PHP 中的金字塔星号

    请看我的代码 for row var row gt 1 row for j 0 j lt row j echo echo echo nbsp Output 但我需要输出如下 您可能想查看一些字符串函数
  • 错误 1366 (HY000):整数值不正确:第 1 行的列“id”的“”[已关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 My code sql INSERT INTO static table name sql join array key
  • 当我在对象上调用函数时,为什么会在非对象上出现此函数调用错误? [复制]

    这个问题在这里已经有答案了 Error 致命错误 调用成员函数 中的非对象上的bind param var www web55 web pdftest events php 76号线 Code public function countDa

随机推荐

  • Ant + 类路径问题

    我已经编写了一个 ANT 脚本 最后正在构建 jar 这是 jar 部分的建筑
  • 使用内联脚本时在 Python 中将 unicode 字符打印到控制台的正确方法

    我正在寻找一种使用 Python 2 x 将 unicode 字符打印到支持 UTF 8 的 Linux 控制台的方法print method 我得到的是 python2 7 c print u 我想要的是 python2 7 c prin
  • Ipython 笔记本 - 无法打开

    我尝试打开 ipython 笔记本但没有成功 不知道为什么 当我输入命令 ipython notebook 时 我收到的输出是 bash usr local bin ipython usr local opt python bin pyth
  • 图片框位图缩放

    我有一个Picturebox和一大堆Bitmaps可以在其中显示 位图与其他位图相比的相对大小对用户来说很重要 他们需要能够看出一张图像比另一张图像小或大 位图还必须完全适合图片框 并且图片框不能调整大小 当简单地在一个巨大的图片框中显示未
  • 将 d3.js SVG 代码转换为独立程序 - 有什么建议吗?

    我有一些用 d3 js 编写的脚本 可以生成 SVG 图表 我想使用独立程序生成这些图表 将这些脚本转换为在批处理模式下运行而不需要浏览器的最简单方法是什么 你可以 将其转换为node js http nodejs org程序 您可以访问文
  • 在 Excel-VBA 中使用 RegEx 替换文本

    我在 Excel 中有如下数据 此处一行 Excel 中的一个单元格 07 July 2015 12 02 14 July 2015 17 02 12 August 2015 22 02 01 September 2015 11 02 我想
  • jQuery 移动选项卡和锚点

    我想使用 jQuery Mobile 创建一个选项卡式移动页面 我已经掌握了创建选项卡 例如 Tab1 Tab2 Tab3 Tab4 以及让每个选项卡加载新内容页面的基础知识 我将如何在特定选项卡中使用锚点 例如 如果有人想要为一个链接添加
  • 如何使用 NodeJS 验证 Hmac?

    我可以使用以下代码通过 NodeJS 成功创建 Hmac 稍微改变示例 https nodejs org api crypto html cryptocreatehmacalgorithm key options https nodejs
  • 如何通过 ssh 连接到 docker 容器

    我正在运行容器hypriot rpi busybox httpd 我正在尝试 ssh 到 docker 容器 但出现以下错误 pi raspberrypi docker exec it cc55da85b915 bash rpc error
  • 将键码的字符串表示形式转换为 Qt::Key (或任何 int)并返回

    我想将代表键盘上的键的字符串转换为键码枚举 例如Qt Key http doc qt digia com 4 7 qt html Key enum 或其他任何东西 转换示例如下 Ctrl to Qt Key Control Up to Qt
  • 远程处理 - 有关客户端的信息。 C#

    在 net 2 0 上使用远程处理时是否可以找到 获取有关连接客户端的一些信息 我想知道有关服务器端连接客户端的一些信息 以便我可以采取相应的行动 这是一个小型且非常本地化的应用程序 同时连接 请求的客户端数量最多不会超过 10 个 在每个
  • Facebook 登录 JS - FB.Event.subscribe('auth.login') 无需点击登录按钮即可触发

    我真的需要您帮助我尝试在我的网站上实现 使用 Facebook 登录 功能 基本上 我正在努力实现以下目标 如果用户之前已确认该应用程序并单击 FB 登录按钮 在我的网站上 他们登录到该网站 使用网站的用户 与 Facebook 用户 ID
  • Jquery 如果它是第一次单击元素

    我需要我的脚本在第一次单击元素时执行某些操作 并在单击 2 3 4 等时继续执行不同的操作 selector click function I would realy like this variable to be updated var
  • 如何扩展/继承组件?

    我想为 Angular 2 中已经部署的一些组件创建扩展 而不必几乎完全重写它们 因为基础组件可能会发生更改 并希望这些更改也反映在其派生组件中 我创建了这个简单的示例来尝试更好地解释我的问题 具有以下基本组件app base panel
  • 了解 JNDI

    JNDI 就像是一张增强版的地图 对吧 我使用键来查找对象的引用 另外 什么是InitialContext 我似乎不太明白这个想法 从概念上讲 JNDI 就像System getProperties 使用类固醇 System getProp
  • Nexus 6 融合位置提供程序 getSpeed 返回 0

    运行 Android 5 0 1 的 Nexus 6 设备上安装的 Google Play 服务版本 6 7 76 设备设置 位置模式设置为 仅限设备 在 Nexus 6 上 当使用具有 PRIORITY HIGH ACCURACY 的融合
  • JDK7 SSL 连接问题忽略不支持的密码套件:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

    我正在建立 SSL 连接 作为客户端 并根据这篇 Oracle 文章 http docs oracle com javase 8 docs technotes guides security SunProviders html SunJSS
  • AWS ECS 503 服务在部署时暂时不可用

    我正在为我的应用程序使用 Amazon Web Services EC2 容器服务和应用程序负载均衡器 当我部署新版本时 我收到 503 服务暂时不可用大约 2 分钟 这比我的应用程序的启动时间要长一点 这意味着我现在无法进行零停机部署 是
  • 拉姆达捕获

    我总是对 lambda 捕获感到困惑 并且不知道变量是通过引用捕获还是通过值捕获 例如 如果我有 a 我不知道是否a通过值或引用捕获 我认为获得它的一个简单方法是通过示例 因此 让我们为每种情况准备一个 如果有多种表达同一事物的方式 则更多
  • 在 php 类中使用 html 是否不好?

    在类函数中使用 html 有什么问题吗 我在 DOM 中调用它 因此不需要返回字符串 public function the contact table gt div some html here div div class staff m