# PHP Faker 教程

> 原文： [https://zetcode.com/php/faker/](https://zetcode.com/php/faker/)

PHP Faker 教程展示了如何使用 Faker 软件包在 PHP 中生成伪造数据。 我们使用`fzaninotto/Faker`包。

## PHP Faker

Faker 是一个生成假数据的 PHP 库。 Faka 数据通常用于测试或用一些伪数据填充数据库。 Faker 受到 Perl 的 Data::Faker 和 Ruby 的 Faker 的极大启发。

## PHP Faker 设置

该软件包随 composer 一起安装。

```php
$ composer req fzaninotto/faker 

```

我们安装`fzaninotto/faker`软件包。

```php
$ composer req symfony/var-dumper

```

另外，我们安装了 Symfony Dumper，它在转储变量时提供更好的控制台输出。

## Faker 工厂

使用`Faker\Factory::create()`，我们创建并初始化一个伪造者生成器。 在生成器上，我们访问生成器属性（称为格式化程序）以生成伪数据。 在内部，Faker 将数据生成委托给提供程序。

默认提供程序使用英语语言环境。 Faker 支持其他语言环境； 他们的完成水平不同。

## 简单的 Faker 示例

以下示例是 Faker 的简单演示。

`simple.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->name . "\n";
echo $faker->address . "\n";

```

该示例输出伪造的名称和地址。

```php
$ php simple.php
Antonia Hahn
355 Mills Light Apt. 722
Krajcikburgh, RI 36330

```

这是一个示例输出。

## 伪造名称

在第二个示例中，我们伪造与用户名有关的数据。

`names.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->name() . "\n";
echo $faker->name('male') . "\n";
echo $faker->name('female') . "\n";

echo $faker->firstName() . "\n";
echo $faker->firstName($gender='male') . "\n";
echo $faker->firstName($gender='female') . "\n";

echo $faker->firstNameMale('female') . "\n";
echo $faker->firstNameFemale('female') . "\n";

echo $faker->lastName() . "\n";

```

该示例创建假的全名，男性的姓氏和姓氏。

```php
$ php names.php
Darion Walker
Prof. Chet Kessler
Prof. Jaida Greenholt PhD
Cristopher
Reid
Gilda
Wiley
Juanita
Jones

```

This is a sample output.

## 伪造语言环境数据

Faker 在某种程度上支持本地化数据。 语言环境已传递给工厂`create()`方法。 请注意，语言环境已完成各种级别。

`localized.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create('sk_SK');

for ($i = 0; $i < 3; $i++) {

    $name = $faker->name;
    $city = $faker->cityName;
    $phone = $faker->phoneNumber;

    echo "$name, $city, $phone\n";
}

```

该示例使用斯洛伐克语生成伪造数据。

```php
$ php localized.php
RNDr. Kvetoslava Zelenayová DSc., Malé Dvorníky, 00421 742 587 664
Agáta Molnárová, Čabalovce, +421 857 627 309
PhDr. Igor Truben, Mokrá Lúka, 00421577302978

```

这是一个示例输出。 请注意，斯洛伐克语带有重音。

## 伪造标题

以下示例为标题创建伪造数据。 Faker 产生学术和个人头衔。

`titles.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->title() . "\n";
echo $faker->title('male'). "\n";
echo $faker->title('female'). "\n";

echo $faker->titleMale . "\n";
echo $faker->titleFemale . "\n"; 
echo $faker->suffix . "\n"; 

```

该程序会为男性和女性生成假标题。

```php
$ php titles.php
Ms.
Dr.
Miss
Prof.
Mrs.
DDS

```

This is a sample output.

## 伪造颜色

Faker 可以创建颜色名称或不同的颜色格式，例如十六进制和 RGB。

`colours.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->hexcolor . "\n";
echo $faker->rgbcolor . "\n";
dump($faker->rgbColorAsArray);
echo $faker->rgbCssColor . "\n";
echo $faker->safeColorName . "\n";
echo $faker->colorName . "\n";

```

该示例显示了如何使用 Faker 创建颜色。

```php
$ php colours.php
#662d69
180,149,135
array:3 [
  0 => 190
  1 => 115
  2 => 170
]
rgb(119,164,223)
aqua
LightGreen
DarkGray

```

This is a sample output.

## 伪造号码

Faker 允许生成随机数字，整数或浮点值。

`numbers.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->randomDigit . "\n";
echo $faker->randomDigitNotNull . "\n"; 

echo $faker->randomNumber() . "\n";
echo $faker->randomNumber($nbDigits = 3, $strict = true) . "\n";

echo $faker->randomFloat() . "\n";
echo $faker->randomFloat($nbMaxDecimals = 5, $min = 0, $max = 20) . "\n";
echo $faker->numberBetween($min = 1500, $max = 6000) . "\n";

dump($faker->shuffle([1, 2, 3, 4, 5, 6]));

```

该示例生成随机数字，整数和浮点数。 它还会随机地对数组值进行混洗。

```php
$ php numbers.php
6
6
3654715
614
4164
12.29093
2347
array:6 [
  0 => 3
  1 => 6
  2 => 2
  3 => 5
  4 => 1
  5 => 4
]

```

This is a sample output.

## 伪造唯一值

使用`unique()`修饰符，我们可以产生唯一的假值。

`unique_values.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

$vals = [];

for ($i = 0; $i < 6; $i++) {

  $vals[] = $faker->unique()->randomDigit;
}

dump($vals); 

```

该示例生成一个包含六个唯一数字的数组。

```php
$ php unique_values.php
array:6 [
  0 => 0
  1 => 6
  2 => 9
  3 => 1
  4 => 5
  5 => 3
]

```

This is a sample output.

## 伪造可选值

使用`optional()`修饰符，我们可以生成可选的假值。 可选值可以为`null`。

`optional_values.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

$vals = [];

for ($i = 0; $i < 6; $i++) {

  $vals[] = $faker->unique()->randomDigit;
}

dump($vals); 

```

该示例生成一个包含六个可选数字的数组。

```php
$ php optional_values.php
array:6 [
  0 => 7
  1 => 4
  2 => null
  3 => null
  4 => null
  5 => 8
]

```

This is a sample output.

## 伪造互联网相关数据

Faker 有多个用于伪造与互联网相关的数据的访问器。

`internet.php`

```php
<?php

require('vendor/autoload.php');

$faker = Faker\Factory::create();

echo $faker->email . "\n";
echo $faker->safeEmail . "\n";
echo $faker->freeEmail . "\n";
echo $faker->companyEmail . "\n";
echo $faker->freeEmailDomain . "\n";
echo $faker->safeEmailDomain . "\n";
echo $faker->userName . "\n";
echo $faker->password . "\n";
echo $faker->domainName . "\n";
echo $faker->domainWord . "\n";
echo $faker->tld . "\n";
echo $faker->url . "\n";
echo $faker->slug . "\n";
echo $faker->ipv4 . "\n";
echo $faker->localIpv4 . "\n";
echo $faker->ipv6 . "\n";
echo $faker->macAddress . "\n";

```

该示例显示了各种与互联网相关的数据，包括电子邮件，域名，信息，IP 地址和 URL。

```php
$ php internet.php
johns.ryleigh@rowe.com
merle96@example.com
nyasia.bergnaum@hotmail.com
morar.dylan@champlin.com
gmail.com
example.net
bartoletti.ena
}#)W+OVU<Lgaa.Atp5^
metz.com
blanda
org
http://www.kling.com/
optio-magnam-provident-pariatur-dolores-consequatur-beatae
127.131.186.145
10.135.68.26
ccf1:64a7:d145:98eb:742d:dc60:cf9e:5d4a
C8:31:FD:24:15:06

```

This is a sample output.

## 用 Faker 生成 XML 数据

在以下示例中，我们使用 Faker 和 Twig 模板生成 XML 数据。 XML 文件将包含用户。

```php
$ mkdir fakexml
$ cd fakexml
$ mkdir templates
$ composer req fzaninotto/faker
$ composer req twig/twig

```

我们创建一个新的项目目录，并安装 Faker 和 Twig 模板引擎。

`User.php`

```php
<?php

class User
{
    public $firstName;
    public $lastName;
    public $occupation;

    function __construct(string $first, string $last, string $occupation) 
    {
        $this->firstName = $first;
        $this->lastName = $last;
        $this->occupation = $occupation;
    }
}

```

这是`User.php`，具有以下属性：`$firstName`，`$lastName`和`$occupation`；

`fake_xml.php`

```php
<?php

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/User.php';

use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Faker\Factory;

$loader = new FilesystemLoader(__DIR__ . '/templates');
$twig = new Environment($loader);

$faker = Factory::create();

$users = [];

for ($i = 0; $i < 20; $i++) 
{
    $firstName = $faker->firstName;
    $lastName = $faker->lastName;
    $occupation = $faker->jobTitle;

    $user = new User($firstName, $lastName, $occupation);
    array_push($users, $user);
}

$content = $twig->render('users.xml.twig', ['users' => $users]);
file_put_contents('users.xml', $content);

```

该程序将生成一个包含二十个用户的数组。 数组将传递到 Twig 模板进行处理。 模板位于`templates`目录中。 生成的内容被写入`users.xml`文件。

`templates/users.xml.twig`

```php
<?xml version="1.0" encoding="UTF-8"?>
<users>
    {% for user in users %}
    <user id="{{ loop.index }}">
        <firstname>{{ user.firstName }}</firstname>
        <lastname>{{ user.lastName }}</lastname>
        <occupation>{{ user.occupation }}</occupation>
    </user>
    {% endfor %}
</users>

```

在模板中，我们使用`for`指令来处理用户数组。

在本教程中，我们使用 PHP Faker 在 PHP 中生成伪数据。

您可能也对以下相关教程感兴趣： [PHP PDO 教程](/php/pdo/)， [Twig 教程](/php/twig/)和 [PHP 教程](/lang/php/)。