GraPHP ist die in PHP geschriebene mathematische Graphen-/Netzwerkbibliothek.
Entwicklungsversion: Dieser Zweig enthält den Code für die kommende Version 1.0. Den Code der aktuellen stabilen Version 0.9 finden Sie im Zweig
0.9.x
Die kommende Version 1.0 wird der Weg für die Zukunft dieses Pakets sein. Wir werden 0.9.x jedoch weiterhin aktiv für diejenigen unterstützen, die noch nicht über die neueste Version verfügen. Weitere Einzelheiten finden Sie auch in der Installationsanleitung.
Inhaltsverzeichnis
Nach der Installation initialisieren wir ein Beispieldiagramm:
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
$ graph = new Graphp Graph Graph ();
// create some cities
$ rome = $ graph -> createVertex ( array ( ' name ' => ' Rome ' ));
$ madrid = $ graph -> createVertex ( array ( ' name ' => ' Madrid ' ));
$ cologne = $ graph -> createVertex ( array ( ' name ' => ' Cologne ' ));
// build some roads
$ graph -> createEdgeDirected ( $ cologne , $ madrid );
$ graph -> createEdgeDirected ( $ madrid , $ rome );
// create loop
$ graph -> createEdgeDirected ( $ rome , $ rome );
Mal sehen, welche Stadt (Vertex) eine Straße (also eine Kante, die nach Rom zeigt) hat:
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Diese Bibliothek basiert auf dem Konzept der mathematischen Graphentheorie (dh es handelt sich nicht um eine Diagrammbibliothek zum Zeichnen eines Funktionsgraphen). Im Wesentlichen ist ein Graph eine Menge von Knoten mit einer beliebigen Anzahl dazwischen liegender Verbindungen . In der Graphentheorie sind Vertices (Plural von Vertex) eine abstrakte Darstellung dieser Knoten , während Verbindungen als Kanten dargestellt werden. Kanten können entweder ungerichtet („zweiseitig“) oder gerichtet („einseitig“, auch Würfelkanten, Bögen genannt) sein.
Je nachdem, wie die Kanten konstruiert sind, kann der gesamte Graph entweder ungerichtet, ein gerichteter Graph (auch Digraph genannt) oder ein gemischter Graph sein. Kanten dürfen auch Schleifen bilden (dh eine Kante von Scheitelpunkt A zeigt wieder auf Scheitelpunkt A). Außerdem werden mehrere Kanten von Scheitelpunkt A bis Scheitelpunkt B unterstützt (auch als parallele Kanten bezeichnet), wodurch effektiv ein Multigraph (auch Pseudograph genannt) entsteht. Und natürlich wird auch jede beliebige Kombination davon unterstützt. Während viele Autoren versuchen, zwischen diesen Kernkonzepten zu unterscheiden, ist diese Bibliothek bestrebt, Ihren Diagrammen keine künstlichen Einschränkungen oder Annahmen aufzuerlegen.
Diese Bibliothek stellt die Kerndatenstrukturen für die Arbeit mit Diagrammen, ihren Eckpunkten, Kanten und Attributen bereit.
Auf diesen Strukturen basieren mehrere offizielle Komponenten, die häufig benötigte Funktionen bereitstellen. Diese Architektur ermöglicht die unabhängige Verwendung dieser Komponenten nur bei Bedarf.
Im Folgenden finden Sie eine Liste einiger hervorgehobener Komponenten. Eine Liste aller offiziellen Komponenten finden Sie im Graphp-Projekt.
Diese Bibliothek unterstützt die Visualisierung von Diagrammbildern, deren Einbindung in Webseiten, das Öffnen von Bildern aus CLI-Anwendungen und deren Export als PNG-, JPEG- oder SVG-Dateiformate (neben vielen anderen). Da das Zeichnen von Diagrammen ein komplexer Bereich für sich ist, wird die eigentliche Gestaltung des Diagramms der hervorragenden „Graph Visualization Software“ von GraphViz überlassen und wir stellen lediglich einige praktische APIs für die Schnittstelle mit GraphViz bereit.
Weitere Informationen finden Sie unter graphp/graphviz.
Neben dem Zeichnen von Diagrammen ist die Ausführung von Algorithmen zur Lösung gängiger Diagrammprobleme eine der häufigsten Aufgaben bei der Verwendung von Diagrammen. Daher wird diese Bibliothek als Grundlage für Implementierungen für eine Reihe häufig verwendeter Graphalgorithmen verwendet:
Weitere Einzelheiten finden Sie unter graphp/algorithms.
Die empfohlene Methode zur Installation dieser Bibliothek ist Composer. Neu bei Composer?
Nach der Veröffentlichung wird dieses Projekt SemVer folgen. Im Moment wird dadurch die neueste Entwicklungsversion installiert:
composer require graphp/graph:^1@dev
Einzelheiten zu Versionsaktualisierungen finden Sie auch im CHANGELOG.
Dieses Projekt zielt darauf ab, auf jeder Plattform ausgeführt zu werden, erfordert daher keine PHP-Erweiterungen und unterstützt die Ausführung auf altem PHP 5.3 bis aktuellem PHP 8+. Es wird dringend empfohlen, für dieses Projekt die neueste unterstützte PHP-Version zu verwenden .
Möglicherweise möchten Sie auch einige der zusätzlichen Komponenten installieren. Eine Liste aller offiziellen Komponenten finden Sie im Graphp-Projekt.
Diese Bibliothek verwendet PHPUnit für ihre umfangreiche Testsuite. Um die Testsuite auszuführen, müssen Sie zunächst dieses Repo klonen und dann alle Abhängigkeiten über Composer installieren:
composer install
Um die Testsuite auszuführen, gehen Sie zum Projektstammverzeichnis und führen Sie Folgendes aus:
vendor/bin/phpunit
Diese Bibliothek verfügt über eine umfangreiche Testsuite und wird regelmäßig in der realen Welt getestet und eingesetzt. Dennoch gilt diese Bibliothek immer noch als Beta-Software und ihre API kann sich ändern. Das Changelog listet alle relevanten Informationen für Updates zwischen Releases auf.
Wenn Sie auf Probleme stoßen, zögern Sie bitte nicht, uns eine E-Mail zu schreiben, einen Fehlerbericht einzureichen oder uns am besten eine Patch-/Pull-Anfrage und/oder einen Unit-Test zur Verfügung zu stellen, um Ihr Problem zu reproduzieren.
Neben der direkten Arbeit mit dem Code sind auch zusätzliche Dokumentationen, Ergänzungen zu unserer Readme-Datei oder auch die Korrektur einfacher Tippfehler willkommen.
Jedes Feedback und/oder jeder Beitrag ist willkommen!
Schauen Sie sich #graphp auf irc.freenode.net an.
Dieses Projekt wird unter der freizügigen MIT-Lizenz veröffentlicht.
Wussten Sie, dass ich maßgeschneiderte Entwicklungsdienstleistungen anbiete und Rechnungen für Sponsoring von Veröffentlichungen und Beiträge ausstelle? Kontaktieren Sie mich (@clue) für Details.