PHP goes .Net

Konsolenanwendung

Konsolenanwendungen und Klassen

image.jpg

© Hersteller/Archiv

Zum Finden von Fehlern (als Debugger) bietet sich die Phalanger-Variablenüberwachung in Visual Studio 2010 an.

An dieser Stelle werden über eine Konsolenanwendung Computer-, System- und Prozessorinformationen ermittelt und an der Eingabeaufforderung ausgegeben. Die Informationen werden über .Net bezogen. Um die Anwendung anzulegen, rufen Sie den Menübefehl Datei/Hinzufügen/Neues Projekt ab, wählen im Hierarchiezweig der installierten Vorlagen die Sprache Phalanger und anschließend den Projekttyp Phalanger Console Application an. Die Anwendung erhält den Namen ConsolePhp.

Im Projektmappen-Explorer finden Sie eine Quelldatei mit dem Namen Programm.php vor, über die Sie die Konsolenanwendung definieren. Jede Anwendung kann eigene Klassen definieren. In der Konsolenanwendung soll über eine Klasse eine Funktion angeboten werden, die Byte-in MByte-Werte umrechnet und Prozessorinformationen bereitstellt.

Zum Anlagen rufen Sie zum Projekt im Projektmappen-Explorer den Kontextmenübefehl Hinzufügen/Neues Element ab, wählen den Elementtyp Class an, vergeben den Namen FunctionClass.php und bestätigen mit Hinzufügen. Um Spracherweiterungen von Visual Basic zu nutzen, binden Sie nach Anwahl des Menübefehls Projekt/Verweis hinzufügen die .Net-Komponente Microsoft.VisualBasic ein.

Erscheint der Komponentenname mehrfach, dann achten Sie darauf, dass Sie die Komponente mit der Version 10.0 auswählen. Über die VB-Komponente greifen Sie in Phalanger auf die Funktionalitäten des My-Objektes zu.

Um die .Net- und Visual-Basic-Funktionalitäten vereinfacht einzusetzen, werden über import-namespace-Anweisungen diverse Namensräume importiert. Der Namensraum System macht die Grundfunktionalität des .Net-Systems und der Namensraum Micro soft:::VisualBasic:::Devices die untergeordneten Objekte zum My-Objekt verfügbar. Bei der Namespace-Angabe wird anstelle der Punkt-mit der dreifachen Doppelpunkt-Notation gearbeitet.

Der PHP-Quelltext wird mit <?php eingeleitet und mit ?> abgeschlossen. Jede Anweisung endet entsprechend C# mit einem Semikolon und Blockstrukturen werden durch geschweifte Klammern eingefasst. Bevor Sie die weiteren Elemente der Programmklasse Program der Konsolenanwendung definieren, werden zunächst die Helferfunktionen der Klasse FunctionClass definiert.

<?php import namespace System;
import namespace
Microsoft:::VisualBasic:::Devices;
class Program { ... } ?>

Der Quelltext dieser Klasse ist wie die Programmklasse aufgebaut. Neben dem Namespace System wird hier der Namensraum ConsolePhp der Konsolenanwendung importiert. Die Namespace-Zuordnung der Klasse FunctionClass erfolgt durch einen namespace-Block. Klassendefinition und zugehöriger Anweisungsblock sind in den geschweiften Klammern der namespace-Anweisung platziert.

Alle Schnittstellenelemente werden in die geschweiften Klammern der class-Anweisung aufgenommen. Der Konstruktur wird automatisch eingerichtet, heißt __construct und ist über die Anweisung public öffentlich.

<?php import namespace ConsolePhp;
import namespace System;
namespace ConsolePhp {
class FunctionClass {
public function __construct() { }
//Konstruktor
... } } ?>

In der Klasse werden zwei Methoden mit public öffentlich definiert. Die Funktion Byte2MByte rechnet einen über den Parameter $b übergebenen Byte-in einen MByte-Wert um. Das Ergebnis wird über return über den Funktionsnamen zurückgegeben.

public function Byte2MByte($b) {
return ($b / 1024) / 1024; }

Die Funktion ProcInfo ermittelt hingegen die Prozessorinformationen über die statische und nicht instanzierbare Klasse Environment sowie deren Eigenschaften ProcessorCount (Prozessoranzahl) und Is64BitOperatingSystem (64-Bit-System). Eigenschaften werden hier dem Objekt über die doppelte Doppelpunktnotation zugeordnet. Die statischen Eigenschaftswerte sind mit einem $-Zeichen einzuleiten.

In der Funktion wird der Zeilenvorschub über eine Escape-Sequenz definiert und über die Variable $cl verwaltet. Teilzeichenketten werden nach Bedarf zugewiesen, mit dem "."-Operator verkettet, gegebenenfalls mit der Methode ToString unter Verwendung des ->-Zuweisungsoperators vom numerischen in das Zeichenkettenformat umgewandelt und abschließend via return als Zeichenkette zurückgeliefert.

public function ProcInfo() {
$cl = "\r\n";
$pi = "Prozessoranzahl: " .
Environment::$ProcessorCount . $cl .
"64-Bit-System: " .
Environment::$Is64BitOperatingSystem
->ToString() . $cl;
return $pi; }

Die Konsolenanwendung wird über die statische Prozedur Main definiert.

static function Main() { ... }

Über die Variable $crlf wird erneut der Wagenrücklauf/Zeilenvorschub definiert, hier allerdings alternativ über die statische Eigenschaft NewLine der Klasse Environment. Über die PHP-Anweisung echo wird anschließend eine Programmmeldung ausgegeben.

$CrLf = Environment::$NewLine;
echo "Phalanger-Konsolenanwendung ... "
. $CrLf;
echo "----------------..." . $CrLf;

Um die Computer- und Systeminformationen abzufragen, werden Objekte des Namespace Microsoft:::VisualBasic:::Devices verwendet. Das Objekt Computer wird via new neu instanziiert und in der Variablen $comp gesichert, um darüber den Computernamen (Name) zu ermitteln und via echo auszugeben.

Das statische Objekt OSVersion liefert entsprechend Informationen zum Betriebssystem und das instanziierbare Objekt ComputerInfo Informationen zur Systembezeichnung, -plattform und -version zurück. Auch diese Informationen werden über echo direkt zeilenweise ausgegeben.

$comp = new Computer;
echo "Computername: " . $comp->Name .
$CrLf;
$info = Environment::$OSVersion
->ToString();
echo "Betriebssystem: " . $info .
$CrLf;
$system = new ComputerInfo;
echo "Systembezeichnung: " . $system
->OSFullName . $CrLf;
echo "Plattform: " . $system
->OSPlatform . $CrLf;
echo "Version: " . $system->OSVersion
. $CrLf;

Das Objekt ComputerInfo, dessen Instanz über $system verwaltet wird, liefert auch Speicherinformationen zurück, die hier über die Helferklasse FunctionClass in MByte-Werte umgerechnet werden sollen. Nachdem die Helferklasse via new instanziiert ist, sind deren Methoden über die Variable $fc abrufbar (hier Byte2Mbyte und ProcInfo).

Um die Anzeige zu pausieren, wird nach der Informationsausgabe mit fgets auf eine Tasteneingabe gewartet. Mit return wird der Rückgabewert der Anwendung festgelegt, der über Windows-API-Funktionen auswertbar ist.

$fc = new ConsolePhp:::FunctionClass;
$pm = $system->AvailablePhysicalMemory;
$freepm = $fc->Byte2MByte($pm);
echo "freier physikalischer Speicher:
" .
$freepm . " MByte" . $CrLf;
$vm = $system->AvailableVirtualMemory;
$freevm = $fc->Byte2MByte($vm);
echo "freier virtueller Speicher: " .
$freevm . " MByte" . $CrLf;
$procinfo = $fc->ProcInfo();
echo $procinfo;
fgets(STDIN);
return 0;;
image.jpg

© Hersteller/Archiv

Visual-Basic-Funktionalitäten lassen sich mit dem Dialog Komponenten auswählen einfach einbinden.

Anhand der Projekteigenschaften bestimmen und variieren Sie, welche PHP-Version in der Quelltextverarbeitung unterstützt werden soll. Um Anpassungen vorzunehmen, rufen Sie den Befehl Projekt/Eigenschaften ab. Im folgenden Dialog weisen Sie über Language Features die zu unterstützenden Versionen an. Um neben PHP-auch die CLR-Erweiterungen einzusetzen, tragen Sie PhpClr ein.

Für die Einstellung Compilation Mode verwenden Sie bei Konsolenanwendungen den Eintrag Standard und bei Windows-Forms-Anwendungen den Eintrag Pure. Über Erstellen/ConsolePhp/neu erstellen erzeugen Sie das ausführbare Programm im Exe-Dateiformat. Über Debuggen/Debuggen starten oder die Funktionstaste F5 führen Sie das Programm, gegebenenfalls schrittweise, in der Entwicklungsumgebung aus.

Mehr zum Thema

Amazon Blitzangebote
Technik-Deals

Die Highlights der Amazon Blitzangebote - heute unter anderem mit WLAN-Repeater, Powerline-Adapter, Netzwerk-Switch, externen Festplatten und mehr.
Pokemon GO Beste Pokemon Arena Verteidigung
Liste

Welche sind die besten Pokémon, um eine Arena zu verteidigen? Wir haben die Tipps in diesem Pokémon GO Guide.
Shutterstock Teaserbild
Pokémon GO & Co.

Pokémon GO hat einen neuen Hype ausgelöst: Augmented Reality. Wir verraten, was möglich ist und wie die virtuellen Dinge in die wirkliche Welt…
Smartphone-Tuning (Symbolbild)
So geht's

Wer Admin über sein Android-Smartphone sein will, braucht Root-Rechte. Mit diesen Tipps und Tools rooten Sie Ihr Galaxy, Nexus & Co.
Pokémon GO Kumpel Liste
Übersicht & Tipps

Unsere Pokémon GO Kumpel-Liste zeigt für alle Monster, wie viele KM Sie mit Ihrem Pokémon-Buddy für eine Bonbon-Belohnung spazieren müssen.