Laravel 单元测试 PHPUnit 基本使用

Laravel 单元测试 PHPUnit 基本使用

介绍

PHPUnit 是最古老和最著名的 PHP 单元测试包之一。它主要用于单元测试,这意味着可以用尽可能小的组件测试代码,但是它也非常灵活,可以用于很多不仅仅是单元测试。

PHPUnit 包含许多简单和灵活的断言允许您轻松地测试代码,当您测试特定的组件时,这些断言非常有效。但是,它确实意味着测试更高级的代码(如控制器和表单提交验证)可能会复杂得多。

为了帮助开发人员更容易地进行开发, Laravel 框架  包含了一系列 应用程序测试帮助程序 ,允许您编写非常简单的 PHPUnit 测试来测试应用程序的复杂部分。

立即学习“PHP免费学习笔记(深入)”;

本教程的目的是向您介绍 PHPUnit 测试的基础知识,使用默认 PHPUnit 断言和 Laravel 测试助手。这样做的目的是在本教程结束时,您可以自信地为应用程序编写基本测试。

前提

本教程假设您已经熟悉 Laravel 并知道如何在应用程序目录中运行命令(例如 php artisan 命令)。我们将创建几个基本的示例类来学习不同的测试工具如何工作,因此建议您为本教程创建一个新的应用程序。

如果已经安装了 Laravel ,则可以通过运行以下命令创建新的测试应用程序:

laravel new phpunit-tests

或者,您可以直接使用 Composer 创建新应用程序:

composer create-project laravel/laravel --prefer-dist

其他安装方法也可以在 Laravel 文档中找到。

创建一个新的测试

使用 PHPUnit 的第一步是创建一个新的测试类。测试类的约定是它们存储在应用程序目录的 ./tests/ 下。在这个文件夹中,每个测试类都被命名为 Test.php 。这种格式允许 PHPUnit 查找每个测试类 — 它将忽略任何不以 Test.php 结尾的文件。

在新的 Laravel 应用程序中,你会注意到 ./tests/ 目录中有两个文件:  ExampleTest.php 和 TestCase.php.  TestCase.php 文件是一个引导文件用于在我们的测试中设置 Laravel 环境。这允许我们在测试中使用 Laravel Facades 并为测试助手提供框架,我们将在稍后介绍。 ExampleTest.php 是一个示例测试类,其中包含使用应用程序测试助手的基本测试用例 – 暂时忽略它。

要创建一个新的测试类,我们可以手动创建一个新文件,或者运行由 Laravel 提供的 Artisan 命令 make:test 

为了创建一个名为 BasicTest 的测试类,我们只需要运行这个 artisan 命令:

php artisan make:test BasicTest

Laravel 将创建一个如下所示的基本测试类:

assertTrue(true);    }}

这里要注意的最重要的事情是 test 方法名称上的前缀,与 Test 类名后缀一样,这样 test 前缀告诉 PHPUnit 在测试时运行哪些方法。如果您忘记了 test 前缀,那么 PHPUnit 将忽略该方法。

在我们第一次运行测试套件之前,有必要指出 Laravel 提供的默认 phpunit.xml 文件。 PHPUnit 在运行时会自动在当前目录中查找名为 phpunit.xml 或者 phpunit.xml.dist 的文件。您可以在此处配置测试的特定选项。

这个文件中有很多信息,但是现在最重要的部分是在 testsuite 目录定义:

                        ./tests/                ...

这将告诉 PHPUnit 运行时在 ./tests/ 目录中找到的测试,正如我们之前所知,这是存储测试的约定。

现在我们已经创建了一个基本测试,并且知道了 PHPUnit 配置,现在是第一次运行测试的时候了。

您可以通过运行以下 phpunit 命令来运行测试:

./vendor/bin/phpunit

您应该看到与此类似的输出:

PHPUnit 4.8.19 by Sebastian Bergmann and contributors...Time: 103 ms, Memory: 12.75MbOK (2 tests, 3 assertions)

现在我们已经有了一个有效的 PHPUnit 设置,现在是时候开始编写一个基本测试了。

注意,它会统计 2 个测试和 3 个断言,因为 ExampleTest.php 文件包含了一个带有两个断言的测试。我们的新基本测试包括一个单独的断言,该断言已通过。

写一个基础测试

为了帮助 PHPUnit 提供的基本断言,我们将首先创建一个提供一些简单功能的基本类

在 ./app/ 目录中创建一个名为 Box.php 的新文件,并复制此示例类:

items = $items;    }    /**    * 检查指定的项目是否在框中。    *    * @param string $item    * @return bool    */    public function has($item)    {        return in_array($item, $this->items);    }    /**    * 从框中移除项,如果框为空,则为 null 。    *    * @return string    */    public function takeOne()    {        return array_shift($this->items);    }    /**    * 从包含指定字母开头的框中检索所有项目。    *    * @param string $letter    * @return array    */    public function startsWith($letter)    {        return array_filter($this->items, function ($item) use ($letter) {            return stripos($item, $letter) === 0;        });    }}

接下来, 打开你的 ./tests/BasicTest.php 类(我们之前创建的类),并删除默认创建的 testExample 方法, 你应该留一个空类。

我们现在将使用七个基本的 PHPUnit 断言来为我们的 Box 类编写测试。这些断言是:

assertTrue()

assertFalse()

assertEquals()

assertNull()

assertContains()

assertCount()

assertEmpty()

assertTrue () 和 assertFalse ()

assertTrue() 和 assertFalse() 允许你声明一个值等于 true 或 false 。这意味着它们非常适合测试返回布尔值的方法。在我们的 Box 类中,我们有一个名为 has($item) 的方法,当指定的项在 box 中或不在 box 中时,该方法返回对应返回 true 或 false .

要在 PHPUnit 中为此编写测试,我们可以执行以下操作:

assertTrue($box->has('toy'));        $this->assertFalse($box->has('ball'));    }}

注意我们如何只将一个参数传递给 assertTrue() 和 assertFalse() 方法,并且它是 has($item) 方法的输入.

如果您现在运行 ./vendor/bin/phpunit 命令,您会注意到输出包括:

OK (2 tests, 4 assertions)

这意味着我们的测试已经通过。

如果您将 assertFalse() 替换成 assertTrue() 并运行 phpunit 命令,输出将如下所示:

PHPUnit 4.8.19 by Sebastian Bergmann and contributors.F.Time: 93 ms, Memory: 13.00MbThere was 1 failure:1) BasicTest::testHasItemInBoxFailed asserting that false is true../tests/BasicTest.php:12FAILURES!Tests: 2, Assertions: 4, Failures: 1.

这告诉我们第 12 行的断言未能断言 false 值是 true – 因为我们将 assertFalse() 替换为 assertTrue() 。

将其交换回来,然后重新运行 PHPUnit 。测试应该再次通过,因为我们已经修复了破损的测试。

assertEquals () 与 assertNull ()

接下来,让我们看看 assertEquals(), 以及 assertNull()。

assertEquals() 用于比较变量实际值与预期值是否相等。我们用它来检查 takeOne() 方法的返回值是否为 Box 内的当前值。当 Box 为空时,takeOne() 将返回 null,我们亦可使用 assertNull() 来进行检查。

与 assertTrue()、assertFalse() 以及 assertNull() 不同,assertEquals() 需要两个参数。第一个参数为 预期 值,第二个参数则为 实际 值。

可参照如下代码实现以上断言(assertions):

assertTrue($box->has('toy'));        $this->assertFalse($box->has('ball'));    }    public function testTakeOneFromTheBox()    {        $box = new Box(['torch']);        $this->assertEquals('torch', $box->takeOne());        // 当前 Box 为空,应当为 Null        $this->assertNull($box->takeOne());    }}

运行 phpunit 命令,你应当看到如下输出:

OK (3 tests, 6 assertions)

assertContains () 和 assertCount () 以及 assertEmpty ()

终于,我们有三个作用于数组有关的断言,我们能够使用它们去检查 Box 类中的  startsWith($item) 方法。 assertContains() 断言传递进来的数组中包含指定值, assertCount() 断言数组的项数为指定数量,assertEmpty() 断言传递进来的数组为空。

让我们来执行以下测试:

assertTrue($box->has('toy'));        $this->assertFalse($box->has('ball'));    }    public function testTakeOneFromTheBox()    {        $box = new Box(['torch']);        $this->assertEquals('torch', $box->takeOne());        // Null,现在这个 box 是空的。        $this->assertNull($box->takeOne());    }    public function testStartsWithALetter()    {        $box = new Box(['toy', 'torch', 'ball', 'cat', 'tissue']);        $results = $box->startsWith('t');        $this->assertCount(3, $results);        $this->assertContains('toy', $results);        $this->assertContains('torch', $results);        $this->assertContains('tissue', $results);        // 如果传递复数断言数组为空        $this->assertEmpty($box->startsWith('s'));    }}

保存并再一次运行你的测试:

OK (4 tests, 9 assertions)

恭喜你,你刚刚使用七个基础的 PHPUnit 断言完成了对 Box 类的全部测试。通过这些简单的断言你能够做许多事,对于其他断言,大多数要更复杂,不过它们仍遵循以上使用规则。

青柚面试 青柚面试

简单好用的日语面试辅助工具

青柚面试 57 查看详情 青柚面试

测试你的程序

在你的程序里,对每个组件进行单元测试在很多情况下都是有必要的,而且也应该成为你开发过程中必不可少的一部分,但这并不是你需要做的全部的测试。当你构建一个包含复杂视图、导航和表单的程序时,你同样想测试这些组件。这时,Laravel 的测试助手可以使这些测试像单元测试简单组件一样容易。

我们之前查看在 ./tests/ 目录下的默认文件时跳过了 ./tests/ExampleTest.php 文件。 现在打开它,内容如下所示:

visit('/')             ->see('Laravel 5');    }}

我们可以看到这个测试示例非常简单。在不知道测试助手如何运作的情况下,我们可以猜测它的意思如下:

当我访问 / (根目录)

我应该看到 ‘Laravel 5’

如果你打开你的 web 浏览器,访问我们的程序(如果你没有启动你的 web 服务器,你可以运行 php artisan serve ),你应该可以在 web 根目录上看到屏幕上有 “Laravel 5” 的文本。 鉴于这个测试已经通过了 PHPUnit,我们可以很确定地说我们对这个测试示例改造是正确的。

这个测试确保了访问 / 路径,网页可以返回 “’Laravel 5” 的文本。一个如此简单的检查也许不代表什么,但如果你的网站上要显示关键信息,它就可以在一个别处的改动导致这个页面无法正常显示正确的信息时,防止你部署一个被损坏的程序。

visit ()、see () 以及 dontSee ()

现在尝试编写自己的测试,更进一步理解它吧。

首先,编辑 ./app/Http/routes.php ,增加一个新的路由。为了教程目的,我们创建希腊字母定义的路由:

<?phpRoute::get('/',function () {    return view('welcome');});Route::get('/alpha',function () {    return view('alpha');});

然后,创建视图文件 ./resources/views/alpha.blade.php,使用 Alpha 作为关键字,保存基本的 HTML 文件:

            Alpha                

This is the Alpha page.

打开浏览器,输入网址: http://localhost:8000/beta,页面会显示出 “This is the Alpha page.” 的内容。

现在我们有了测试用到的模版文件,下一步,我们通过运行命令 make:test 来创建一个新的测试文件:

php artisan make:test AlphaTest

然后变成刚创建好的测试文件,按照框架提供的例子,测试 “alpha” 页面上没有包含 “beta” 。 我们可以使用方法 dontSee() ,它是 see() 的对应的反向方法。

下面代码是上面实现的简单例子:

visit('/alpha')             ->see('Alpha')             ->dontSee('Beta');    }}

保存并运行 PHPUnit (./vendor/bin/phpunit),测试代码应该会全部通过,你会看到像这样的测试状态内容显示:

OK (5 tests,12 assertions)

开发前先写测试

对于测试来说,测试驱动开发 (TDD) 是非常酷的方法,首先我们先写测试。写完测试并执行它们,你会发现测试没通过,接下来 我们编写满足测试的代码,再次执行测试,使测试通过。 接下来让我们开始。

首先,建立一个 BetaTest 类使用 make:test artisan 命令:

php artisan make:test BetaTest

接下来,更新测试用例以便检查 /beta 的路由 route 为「Beta」:

visit('/beta')             ->see('Beta')             ->dontSee('Alpha');    }}

现在使用 ./vendor/bin/phpunit 命令来执行测试。结果是一个看起来简洁但不好的错误信息,如下:

> ./vendor/bin/phpunitPHPUnit 4.8.19 by Sebastian Bergmann and contributors.....F.Time: 144 ms, Memory: 14.25MbThere was 1 failure:1) BetaTest::testDisplaysBeta一个对 [http://localhost/beta] 的请求失败了。收到状态码 [404]。...FAILURES!Tests: 6, Assertions: 13, Failures: 1.

我们现在需要创建这个不存在的路由。让我们开始。

首先,编辑 ./app/Http/routes.php 文件来创建新的 /beta 路由:

<?phpRoute::get('/', function () {    return view('welcome');});Route::get('/alpha', function () {    return view('alpha');});Route::get('/beta', function () {    return view('beta');});

接下来,在 ./resources/views/beta.blade.php 下创建如下视图模版:

            Beta                

This is the Beta page.

现在再一次执行 PHPUnit,结果应该再一次回到绿色。

> ./vendor/bin/phpunitPHPUnit 4.8.19 by Sebastian Bergmann and contributors.......Time: 142 ms, Memory: 14.00MbOK (6 tests, 15 assertions)

这样我们就通过在完成新的页面之前写测试的方式,对 测试驱动开发 进行了实践。

click () 和 seePageIs ()

Laravel 也提供一个辅助函数 (click()) 允许测试点击页面中存在的连接 ,以及一个方法 (seePageIs()) 检查点击展示的结果页面。

让我们使用这两个辅助函数去执行在 Alpha 和 Beta 页面的链接。

首先,我们更新我们的测试。打开 AlphaTest 类,我们将添加一个新的测试方法,这将点击 「alpha」页面上的「Next」链接跳转到 「beta」页面。

新的测试代码如下:

visit('/alpha')             ->see('Alpha')             ->dontSee('Beta');    }    public function testClickNextForBeta()    {        $this->visit('/alpha')             ->click('Next')             ->seePageIs('/beta');    }}

注意到,在我们新建的 testClickNextForBeta() 方法中,我们并没有检查每一个页面的内容。 其他测试都成功的检查了两个页面的内容,所以这里我们只关心点击 「Next」链接将发送到 /beta。

你现在可以运行测试组件了,但就像预料的一样测试将不通过,因为我们还没有更新我们的 HTML。

接下来,我们将更新 BetaTest 来做类似的事情:

visit('/beta')             ->see('Beta')             ->dontSee('Alpha');    }    public function testClickNextForAlpha()    {        $this->visit('/beta')             ->click('Previous')             ->seePageIs('/alpha');    }}

接下来,我们更新我们的 HTML 模版。

./resources/views/alpha.blade.php:

            Alpha                

This is the Alpha page.

Next

./resources/views/beta.blade.php: Beta

This is the Beta page.

Previous

保存文件,再一次执行 PHPUnit:

> ./vendor/bin/phpunitPHPUnit 4.8.19 by Sebastian Bergmann and contributors.F....F..Time: 175 ms, Memory: 14.00MbThere were 2 failures:1) AlphaTest::testDisplaysAlphaFailed asserting that '            Alpha                

This is the Alpha page.

Next

' does not match PCRE pattern "/Beta/i".2) BetaTest::testDisplaysBetaFailed asserting that ' Beta

This is the Beta page.

Previous

' does not match PCRE pattern "/Alpha/i".FAILURES!Tests: 8, Assertions: 23, Failures: 2.

然而测试失败了。如果你仔细观察我们的新 HTML,你将注意到我们分别有术语 beta 和 alpha 在 /alpha 和 /beta 页面。这意味着我们需要稍微更改我们的测试让它们与误报不匹配。

在每一个 AlphaTest 和 BetaTest 类,更新 testDisplays* 方法去使用 dontSee(‘ page’)。通过这种方式,这将仅仅匹配字符串而不是那个术语。

两个测试文件如下所示:

./tests/AlphaTest.php:

visit('/alpha')             ->see('Alpha')             ->dontSee('Beta page');    }    public function testClickNextForBeta()    {        $this->visit('/alpha')             ->click('Next')             ->seePageIs('/beta');    }}

./tests/BetaTest.php:

visit('/beta')             ->see('Beta')             ->dontSee('Alpha page');    }    public function testClickNextForAlpha()    {        $this->visit('/beta')             ->click('Previous')             ->seePageIs('/alpha');    }}

再一次运行你的测试,所有的测试都应该通过了。我们现在已经测试我们所有的新文件,包括页面中的 Next/Previous 链接。

通过 Semaphore 对 PHPUnit 持续集成

通过 Semaphore 设置 持续集成你可以自动执行你的测试。

这样每一次你进行 git push 提交代码的时候都会执行你的测试,并且 Semaphore 预装了所有最新的 PHP 版本。

如果你还没有一个 Semaphore 账户, 先去 注册一个免费的 Semaphore 账户 。接下来需要做的是将它 添加到你的项目,并按照提示逐步去做来执行你的测试:

composer install –prefer-source

phpunit

关于 PHP 持续集成 的更多信息,请参照 Semaphore 文档。

结语

你应该注意到本教程中的所有测试都有一个共同的主题:它们都非常简单。 这是学习如何使用基本的测试断言和辅助函数,并且尽可能的使用它们的好处之一。编写测试越简单,测试就越容易理解和维护。

掌握了本教程中介绍的 PHPUnit 断言之后,你还可以去 PHPUnit 文档 找到更多内容。 所有的断言都遵循基本的模式,但你会发现,在大多数测试中都会返回基本的断言。

对于 PHPUnit 断言来说,Laravel 的测试辅助函数是极好的补充,这让应用程序的测试变的非常容易。也就是说,重要的是要认识到,对于我们写测试,我们只检查关键信息,而不是整个页面。这使得测试变得简单,并允许页面内容随着应用程序的变化而变化。如果关键信息仍然存在,测试仍然通过,每个人都会满意。

推荐教程:《Laravel开发》《PHP教程》

以上就是Laravel 单元测试 PHPUnit 基本使用的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/490267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 15:22:28
下一篇 2025年11月8日 15:23:54

相关推荐

  • HTMLrev 上的免费 HTML 网站模板

    HTMLrev 是唯一的人工策划的库专门专注于免费 HTML 模板,适用于由来自世界各地慷慨的模板创建者制作的网站、登陆页面、投资组合、博客、电子商务和管理仪表板世界。 这个人就是我自己 Devluc,我已经工作了 1 年多来构建、改进和更新这个很棒的免费资源。我自己就是一名模板制作者,所以我知道如…

    2025年12月24日
    300
  • 如何使用 Laravel 框架轻松整合微信支付与支付宝支付?

    如何通过 laravel 框架整合微信支付与支付宝支付 在 laravel 开发中,为电商网站或应用程序整合支付网关至关重要。其中,微信支付和支付宝是中国最流行的支付平台。本文将介绍如何使用 laravel 框架封装这两大支付平台。 一个简单有效的方法是使用业内认可的 easywechat lara…

    2025年12月24日
    000
  • Laravel 框架中如何无缝集成微信支付和支付宝支付?

    laravel 框架中微信支付和支付宝支付的封装 如何将微信支付和支付宝支付无缝集成到 laravel 框架中? 建议解决方案 考虑使用 easywechat 的 laravel 版本。easywechat 是一个成熟、维护良好的库,由腾讯官方人员开发,专为处理微信相关功能而设计。其 laravel…

    2025年12月24日
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 使用Laravel框架如何整合微信支付和支付宝支付?

    使用 Laravel 框架整合微信支付和支付宝支付 在使用 Laravel 框架开发项目时,整合支付网关是常见的需求。对于微信支付和支付宝支付,推荐采用以下方法: 使用第三方库:EasyWeChat 的 Laravel 版本 建议直接使用现有的 EasyWeChat 的 Laravel 版本。该库由…

    2025年12月24日
    000
  • 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中?

    如何简洁集成微信和支付宝支付到 Laravel 问题: 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中? 答案: 强烈推荐使用流行的 Laravel 包 EasyWeChat,它由腾讯开发者维护。多年来,它一直保持更新,提供了一个稳定可靠的解决方案。 集成步骤: 安装 Laravel …

    2025年12月24日
    100
  • 网页设计css样式代码大全,快来收藏吧!

    减少很多不必要的代码,html+css可以很方便的进行网页的排版布局。小伙伴们收藏好哦~ 一.文本设置    1、font-size: 字号参数  2、font-style: 字体格式 3、font-weight: 字体粗细 4、颜色属性 立即学习“前端免费学习笔记(深入)”; color: 参数 …

    2025年12月24日
    000
  • css中id选择器和class选择器有何不同

    之前的文章《什么是CSS语法?详细介绍使用方法及规则》中带了解CSS语法使用方法及规则。下面本篇文章来带大家了解一下CSS中的id选择器与class选择器,介绍一下它们的区别,快来一起学习吧!! id选择器和class选择器介绍 CSS中对html元素的样式进行控制是通过CSS选择器来完成的,最常用…

    2025年12月24日
    000
  • php约瑟夫问题如何解决

    “约瑟夫环”是一个数学的应用问题:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把它踢出去…,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。…

    好文分享 2025年12月24日
    000
  • CSS新手整理的有关CSS使用技巧

    [导读]  1、不要使用过小的图片做背景平铺。这就是为何很多人都不用 1px 的原因,这才知晓。宽高 1px 的图片平铺出一个宽高 200px 的区域,需要 200*200=40, 000 次,占用资源。  2、无边框。推荐的写法是     1、不要使用过小的图片做背景平铺。这就是为何很多人都不用 …

    好文分享 2025年12月23日
    000
  • CSS中实现图片垂直居中方法详解

    [导读] 在曾经的 淘宝ued 招聘 中有这样一道题目:“使用纯css实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。”当然出题并不是随意,而是有其现实的原因,垂直居中是 淘宝 工作中最 在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸…

    好文分享 2025年12月23日
    000
  • CSS派生选择器

    [导读] 派生选择器通过依据元素在其位置的上下文关系来定义样式,你可以使标记更加简洁。在 css1 中,通过这种方式来应用规则的选择器被称为上下文选择器 (contextual selectors),这是由于它们依赖于上下文关系来应 派生选择器 通过依据元素在其位置的上下文关系来定义样式,你可以使标…

    好文分享 2025年12月23日
    000
  • CSS 基础语法

    [导读] css 语法 css 规则由两个主要的部分构成:选择器,以及一条或多条声明。selector {declaration1; declaration2;     declarationn }选择器通常是您需要改变样式的 html 元素。每条声明由一个属性和一个 CSS 语法 CSS 规则由两…

    2025年12月23日
    300
  • CSS 高级语法

    [导读] 选择器的分组你可以对选择器进行分组,这样,被分组的选择器就可以分享相同的声明。用逗号将需要分组的选择器分开。在下面的例子中,我们对所有的标题元素进行了分组。所有的标题元素都是绿色的。h1,h2,h3,h4,h5 选择器的分组 你可以对选择器进行分组,这样,被分组的选择器就可以分享相同的声明…

    好文分享 2025年12月23日
    000
  • CSS id 选择器

    [导读] id 选择器id 选择器可以为标有特定 id 的 html 元素指定特定的样式。id 选择器以 ” ” 来定义。下面的两个 id 选择器,第一个可以定义元素的颜色为红色,第二个定义元素的颜色为绿色: red {color:re id 选择器 id 选择器可以为标有特…

    好文分享 2025年12月23日
    000
  • 有关css的绝对定位

    [导读] 定位(左边和顶部) css定位属性将是网虫们打开幸福之门的钥匙: h4 { position: absolute; left: 100px; top: 43px }这项css规则让浏览器将 的起始位置精 确地定在距离浏览器左边100象素,距离其 定位(左边和顶部) css定位属性将是网虫们…

    好文分享 2025年12月23日
    000
  • html5怎么加php_html5用Ajax与PHP后端交互实现数据传递【交互】

    HTML5不能直接运行PHP,需通过Ajax与PHP通信:前端用fetch发送请求,PHP接收处理并返回JSON,前端解析响应更新DOM;注意跨域、编码、CSRF防护和输入过滤。 HTML5 本身是前端标记语言,不能直接运行 PHP 代码,但可以通过 Ajax(异步 JavaScript)与 PHP…

    2025年12月23日
    300
  • 手机端怎么运行html文件_手机端运行html文件方法【教程】

    可通过手机浏览器、代码编辑器、本地服务器或在线工具四种方式预览HTML文件:一、用文件管理器打开HTML并选择浏览器即可渲染页面;二、使用Acode等编辑器导入文件后点击预览功能实时查看;三、对复杂项目可用KSWEB搭建本地服务器,将文件放入指定目录后通过http://127.0.0.1:8080访…

    2025年12月23日
    000
  • html5如何插入txt纯文本_html5txt文本嵌入与编码设置【实操】

    可通过iframe、fetch+pre、object标签或服务端预处理四种方式在HTML5中显示外部TXT文件,需重点处理字符编码(如UTF-8声明、BOM、响应头)并防范XSS风险。 如果您希望在HTML5页面中显示外部TXT纯文本文件的内容,浏览器默认不支持直接嵌入TXT文件为可渲染内容,必须通…

    2025年12月23日
    000
  • php如何html_在PHP代码中输出HTML内容【输出】

    必须确保PHP正确解析并输出原始HTML字符串而非转义文本;可通过echo/print直接输出、heredoc语法处理多行含变量HTML,或用PHP结束标签切换至纯HTML模式。 如果您在PHP脚本中需要将HTML代码作为响应内容发送给浏览器,则必须确保PHP正确解析并输出原始HTML字符串,而非将…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信