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

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

不言
Freigeben: 2023-04-04 21:52:02
nach vorne
4046 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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.
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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));
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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));
}
Nach dem Login kopieren
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']);
Nach dem Login kopieren

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!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage