Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die virtuelle Datenfüllung durch Faker (mit Beispielen)

Detaillierte Einführung in die virtuelle Datenfüllung durch Faker (mit Beispielen)

不言
不言nach vorne
2019-01-29 11:19:223962Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Methode (Codebeispiel) zum Öffnen eines neuen Seitenlinks in der Miniprogrammentwicklung. Ich hoffe, dass er für Sie hilfreich ist.

Faker ist ein Dummy-Datengenerator, der zum Füllen von Datenbanken für Stresstests oder zum Erstellen eleganter XML-Dokumente verwendet werden kann.

Installation

Wenn das Projekt Composer unterstützt, verwenden Sie den folgenden Befehl, um es zu installieren. Wenn es nicht unterstützt wird, laden Sie bitte den Quellcode aus dem Github-Repository von Faker herunter und legen Sie ihn im Erweiterungspaketordner des Projekts ab.

composer require fzaninotto/faker

Um die Funktionalität zu demonstrieren, habe ich mit dem folgenden Befehl ein neues Projekt erstellt:

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

cd data-seeder
// 安装 faker 扩展
composer require fzaninotto/faker

Grundlegende Verwendung

Erstellen Sie eine Testdatei im Stammverzeichnis Verzeichnis test.php, geben Sie den folgenden Code ein:

<?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;

Führen Sie das Skript im CLI-Modus aus, php test.phpsehen Sie sich die Ausgabeergebnisse an. Die Ergebnisse von faker werden zufällig generiert:

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.

Fakers Eigennamen

faker definiert einige Eigennamen, um uns zu helfen, seine Designideen zu verstehen seinen Quellcode verstehen.

Formatierer

Zusätzlich zu den oben genannten drei Attributen bietet faker auch eine große Anzahl von Simulationsdaten zur Auswahl. Jedes Generatorattribut (wie oben verwendete name, address und lorem) wird als Formatierer (Formatierer) bezeichnet.

Anbieter

Es gibt viele Arten von Daten, die wir ausfüllen müssen, wie zum Beispiel

  • Grundlegende Zufallsdaten: ganze Zahlen, Gleitkommazahlen, Buchstaben

  • Zufällige Zeicheninformationen: Name, Nachname, Vorname usw.

  • Zufällige Nummer: Mobiltelefonnummer, Telefonnummer

Faker definiert jede Kategorie als Anbieter. Sehen Sie sich data-seeder/vendor/fzaninotto/faker/src/Faker/Provider an, um die Klassendateien verschiedener Anbieter sowie die Dateien von Sprachpaketen anzuzeigen.

Quellcode-Analyse

Das Faker-Erweiterungspaket ist klein, enthält aber alles Wesentliche und ist sehr wertvoll zum Lernen.

Generierung von Faker-Objekten

Sehen Sie sich die Factory-Methode des Faker-Generators an:

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;
}

Parameterlocale ist das Sprachpaket, der Standardwert ist en_US Englisch der Vereinigten Staaten. Alle unterstützten Sprachpakete können im Verzeichnis data-seeder/vendor/fzaninotto/faker/src/Faker/Provider eingesehen werden.

Die Standardanbieter (Anbieter wurde oben erwähnt) finden Sie in der Eins-zu-eins-Korrespondenz im oben genannten Anbieterverzeichnis. Durchlaufen Sie das Array und fügen Sie den entsprechenden Anbieter zum Generator $generator hinzu.

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 sucht nach der Provider-Klasse gemäß der folgenden Logik. Wenn sie in der aktuellen Datei nicht vorhanden ist, wird nach der Datei der nächsten Ebene gesucht Wenn Sie es finden, wird eine Ausnahme ausgelöst:

Der vom Benutzer übergebene Sprachpaketordner -> Der Standard-Sprachpaketordner en_US -> 🎜>

public function addProvider($provider)
{
    array_unshift($this->providers, $provider);
}

addProvider ist sehr einfach. Fügen Sie einfach den gefundenen Anbieter zum Kopf des Arrays hinzu und das Array wird in den Eigenschaften des zurückzugebenden -Objekts gespeichert.

Fake-Objektaufruf

$generatorBei Verwendung des von Faker zurückgegebenen Objekts gibt es zwei Möglichkeiten: Aufrufen von Attributen und Aufrufen von Methoden. Diese Aufrufe lösen die magische Methode aus:

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);
}

Die Logik der beiden ist ähnlich. Hier ist die problematischere

magische Methode. Die magische Methode übergibt den aufgerufenen Methodennamen und die Parameter an

Verfahren.

getFormatter__call

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));
}
farmat speichert die Informationen zum Formatierer, der im Faker-Eigennamen erwähnt wird. Um das Verständnis zu erleichtern, finden Sie hier ein Beispiel für die Verwendung eines zufälligen Elements in einem Array, um diese abstrakten Konzepte zu veranschaulichen.

$faker->randomElement(['a', 'b', 'c']);

Wenn diese Methode aufgerufen wird, wird die magische Methode ausgelöst und durchläuft dann jede Anbieterklasse, um herauszufinden, ob diese Methode vorhanden ist. Bis diese Methode in

gefunden wird, ist der zu verwendende Anbieter $this->formatters und der Formatierer ist die Methode

.

Base.php Dann müssen Sie die entsprechende Beziehung von randomeElement() in Base speichern, um zu vermeiden, dass beim nächsten Mal alle Anbieter erneut durchlaufen werden. Dies ist der Grund, warum Base.php implementiert wird. randomElement()

Nachdem diese Methode den entsprechenden Anbieter und Formatierer zurückgegeben hat, rufen Sie sie über

auf und geben Sie das Ergebnis zurück. $this->formatters

An diesem Punkt ist ein vollständiger

Objektgenerierungs- und Aufrufprozess abgeschlossen. call_user_func_array

faker

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die virtuelle Datenfüllung durch Faker (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen