ホームページ > バックエンド開発 > PHPチュートリアル > Faker 仮想データ充填の詳細な紹介 (例付き)

Faker 仮想データ充填の詳細な紹介 (例付き)

不言
リリース: 2023-04-04 21:52:02
転載
4050 人が閲覧しました

この記事の内容は、小さなプログラムの開発において、新しいページのリンクを開く方法(コード例)に関するもので、一定の参考価値があります。困っている友人は参考にしていただければ幸いです。あなたへ。

Faker は、ストレス テスト用にデータベースにデータを入力したり、エレガントな XML ドキュメントを作成したりするために使用できるダミー データ ジェネレーターです。

インストール

プロジェクトが Composer をサポートしている場合は、次のコマンドを使用してインストールします。サポートされていない場合は、Faker の Github リポジトリからソース コードをダウンロードし、プロジェクトの拡張パック フォルダーに入れてください。

composer require fzaninotto/faker
ログイン後にコピー

機能をデモンストレーションするために、次のコマンドを使用して新しいプロジェクトを作成しました。

// 创建新项目文件夹
mkdir data-seeder

cd data-seeder
// 安装 faker 扩展
composer require fzaninotto/faker
ログイン後にコピー

基本的な使用法

ルートにテスト ファイルを作成します。ディレクトリ test.php に次のコードを入力します。

<?php
require_once __DIR__ . &#39;/vendor/fzaninotto/faker/src/autoload.php&#39;;
$faker = Faker\Factory::create();
echo $faker->name, "\n";
echo $faker->address, "\n";
echo $faker->text;
ログイン後にコピー

CLI モードでスクリプトを実行します。php test.php 出力を表示します。 Faker の結果はランダムに生成されます:

Prof. Kailyn Barton
9230 Herzog Groves Suite 005
Gusikowskihaven, CO 60533-4716
Nesciunt voluptas debitis iusto consectetur possimus mollitia in quam. Vel non rem temporibus illo numquam est. Sit fugit sed fugit id eligendi eaque sunt possimus.
ログイン後にコピー

Faker の固有名詞

faker は、その設計思想を理解するのに役立ついくつかの固有名詞を定義しています。これらの概念を理解することは、次のような場合に非常に役立ちます。彼のソースコードを理解すること。

フォーマッター

上記の 3 つの属性に加えて、faker は選択できる多数のシミュレーション データも提供します。各ジェネレーター属性 (上記で使用した nameaddresslorem など) は、formatter (フォーマッタ) と呼ばれます。

プロバイダ

  • 基本的なランダム データ: 整数、浮動小数点数、文字 # など、入力する必要があるデータの種類は数多くあります。

  • ランダムな文字情報:名前、姓、名など

  • 乱数:携帯電話番号、電話番号
  • Faker は各カテゴリをプロバイダーとして定義します。data-seeder/vendor/fzaninotto/faker/src/Faker/Provider を表示して、さまざまなプロバイダーのクラス ファイルと言語パックのファイルを確認します。

ソースコード分析

faker 拡張パッケージのサイズは小さいですが、必要なものがすべて揃っており、学習には非常に価値があります。

フェイカー オブジェクトの生成

フェイカー ジェネレーターのファクトリ メソッドを表示します:

const DEFAULT_LOCALE = 'en_US';

protected static $defaultProviders = array('Address', 'Barcode', 'Biased', 'Color', 'Company', 'DateTime', 'File', 'HtmlLorem', 'Image', 'Internet', 'Lorem', 'Miscellaneous', 'Payment', 'Person', 'PhoneNumber', 'Text', 'UserAgent', 'Uuid');

public static function create($locale = self::DEFAULT_LOCALE)
{
    $generator = new Generator();
    foreach (static::$defaultProviders as $provider) {
        $providerClassName = self::getProviderClassname($provider, $locale);
        $generator->addProvider(new $providerClassName($generator));
    }

    return $generator;
}
ログイン後にコピー

Parameter

locale

は言語パッケージです。デフォルトは en_US 米国英語です。サポートされているすべての言語パックは、data-seeder/vendor/fzaninotto/faker/src/Faker/Provider ディレクトリで確認できます。 デフォルトのプロバイダー (プロバイダーは上で説明しました) は、上記のプロバイダー ディレクトリに 1 対 1 対応で見つかります。配列をループし、対応するプロバイダーをジェネレーター

$generator

に追加します。 getProviderClassname

protected static function getProviderClassname($provider, $locale = '')
{
    if ($providerClass = self::findProviderClassname($provider, $locale)) {
        return $providerClass;
    }
    // fallback to default locale
    if ($providerClass = self::findProviderClassname($provider, static::DEFAULT_LOCALE)) {
        return $providerClass;
    }
    // fallback to no locale
    if ($providerClass = self::findProviderClassname($provider)) {
        return $providerClass;
    }
    throw new \InvalidArgumentException(sprintf('Unable to find provider "%s" with locale "%s"', $provider, $locale));
}
ログイン後にコピー

getProviderClassname は、次のロジックに従ってプロバイダ クラスを検索します。現在のファイルに存在しない場合は、次のレベルのファイルを検索します。見つからない場合は、次のレベルのファイルを検索します。

ユーザーによって渡された言語パック フォルダー -> デフォルトの en_US 言語パック フォルダー -> プロバイダー ルート ディレクトリ


addProvider

public function addProvider($provider)
{
    array_unshift($this->providers, $provider);
}
ログイン後にコピー

addProvider は非常に簡単です。見つかったプロバイダーを配列の先頭に追加するだけです。配列は、返される

$generator

オブジェクトのプロパティに格納されます。 faker オブジェクトの呼び出し

faker から返されたオブジェクトを使用する場合、プロパティを呼び出す方法とメソッドを呼び出す方法の 2 つがあります。これらの呼び出しは、マジック メソッドをトリガーします:

public function format($formatter, $arguments = array())
{
    return call_user_func_array($this->getFormatter($formatter), $arguments);
}

public function __get($attribute)
{
    return $this->format($attribute);
}

public function __call($method, $attributes)
{
    return $this->format($method, $attributes);
}
ログイン後にコピー

この 2 つのロジックは似ています。ここでは、より面倒な

__call

マジック メソッドを示します。マジック メソッドは、呼び出されたメソッド名とパラメーターを に渡します。 farmat メソッド。 getFormatter

public function getFormatter($formatter)
{
    if (isset($this->formatters[$formatter])) {
        return $this->formatters[$formatter];
    }
    foreach ($this->providers as $provider) {
        if (method_exists($provider, $formatter)) {
            $this->formatters[$formatter] = array($provider, $formatter);

            return $this->formatters[$formatter];
        }
    }
    throw new \InvalidArgumentException(sprintf('Unknown formatter "%s"', $formatter));
}
ログイン後にコピー

$this->formatters

には、faker 固有名詞で言及されているフォーマッタに関する情報が格納されます。理解を容易にするために、これらの抽象的な概念を説明するために配列内のランダムな要素を取得する例を示します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$faker-&gt;randomElement(['a', 'b', 'c']);</pre><div class="contentsignin">ログイン後にコピー</div></div>このメソッドが呼び出されると、マジック メソッドがトリガーされ、各プロバイダー クラスが走査されて、このメソッドが存在するかどうかが確認されます。このメソッドが

Base.php

で見つかるまで、この時点で使用されるプロバイダーは Base.php で、フォーマッタは randomElement() メソッドです。 。 その後、次回からすべてのプロバイダーを再度通過することを避けるために、randomeElement() の対応する関係を Base に保存する必要があります。これが、

$this->formatters

が実装されている理由です。 このメソッドは、対応するプロバイダーとフォーマッタを返した後、

call_user_func_array

を通じて呼び出され、結果を返します。 この時点で、完全な

faker

オブジェクトの生成と呼び出しプロセスが終了しました。

以上がFaker 仮想データ充填の詳細な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート