[PHP]Strukturen Emulation

Fragen zum Thema HTML, JavaScript, PHP
Antworten
Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

[PHP]Strukturen Emulation

Beitrag von darksider3 » Mo Jan 14, 2013 9:42 pm

Hallo,
ich habe mir heute mal ein paar Tutorien hier über Strukturen durchgelesen, und die waren leider alle in C/C++. Da dachte ich mir, dass es vielleicht mal ganz Interessant wäre, struct in PHP nach zu "bauen":

Code: Alles auswählen

<?php
class Struct
{
    /**
     * Definiert eine neue struktur, ohne jegliche Einstellungen(bzw. inhalt)
     */
    public static function factory()
    {
        $struct = new self;
        foreach (func_get_args() as $value) {
            $struct->$value = null;
        }
        return $struct;
    }
 
    /**
     * Ersellt eine neue Struktur des Typs $this
     */
    public function create()
    {
        // Die Struktur klonen, um Sie unverändert zu lassen
        $struct = clone $this;
 
        // Entwirft die neue Struktur
        $properties = array_keys((array) $struct);
        foreach (func_get_args() as $key => $value) {
            if (!is_null($value)) {
                $struct->$properties[$key] = $value;
            }
        }
 
        // Zurückgeben der eingetragenen Struktur
        return $struct;
    }
}
Beispiel1: Simple Struktur mit 'null' als inhalt:

Code: Alles auswählen

<?php
require 'Struct.php';

// struktur definieren
$struct1 = Struct::factory('var1', 'var2');
 
$instance0 = $struct1->create('val0-1', 'val0-2');
$instance1 = $struct1->create('val1-1', 'val1-2');
$instance2 = $struct1->create('val2-1'); // var2 ist null
 
echo $instance1->var2;
Beispiel2: Simple Struktur mit Standard-Inhalt:

Code: Alles auswählen

<?php
require 'Struct.php';

$struct2 = Struct::factory('var3', 'var4');
$struct2->var3 = 'default';
 
$instance3 = $struct2->create('val3-1', 'val3-2');
$instance4 = $struct2->create('val4-1', 'val4-2');
$instance5 = $struct2->create(null, 'val5-2'); // null bekommt den Standardinhalt
 
echo $instance4->var3;
Mfg,
Darksider3 :)
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [PHP]Strukturen Emulation

Beitrag von Xin » Mo Jan 14, 2013 11:28 pm

darksider3 hat geschrieben:ich habe mir heute mal ein paar Tutorien hier über Strukturen durchgelesen, und die waren leider alle in C/C++. Da dachte ich mir, dass es vielleicht mal ganz Interessant wäre, struct in PHP nach zu "bauen":
...?

Warum genau ist das interessant?!
darksider3 hat geschrieben:class Struct
Süß... PHP Programmierer... :-)

Klassen sind eigentlich die Weiterentwicklung von structs... ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: [PHP]Strukturen Emulation

Beitrag von Glocke » Di Jan 15, 2013 4:39 pm

darksider3 hat geschrieben:Da dachte ich mir, dass es vielleicht mal ganz Interessant wäre, struct in PHP nach zu "bauen"
Ich habe es immer gehasst solche Fragen als Antwort zu bekommen, aber: Warum? :lol:

Auch so etwas, was früher selber ungern gelesen habe, aber Xin hat Recht, dass Klassen eigentlich die "Weiterentwicklung" von Strukturen sind. Vermutlich gibt es ein paar Fälle, in denen Structs zu bevorzugen sind ... oder auch nicht :D Irgendeinen Grund muss es ja geben, dass die in C# enthalten sind. Whatever. Lange Rede, kurzer Sinn:

Als "Spaß" sicherlich interessant aber eine ernsthafte Verwendung sehe ich noch nicht :D Sorry :D

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [PHP]Strukturen Emulation

Beitrag von Xin » Di Jan 15, 2013 4:46 pm

Glocke hat geschrieben:Vermutlich gibt es ein paar Fälle, in denen Structs zu bevorzugen sind ... oder auch nicht :D Irgendeinen Grund muss es ja geben, dass die in C# enthalten sind.
Klassen sind in C# ausschließlich Referenztypen, Structs sind Valuetypen.
Structs werden bei Parameterübergaben also kopiert, während bei Klassen lediglich Referenzen übermittelt werden.
Da Strukturen kopiert werden müssen, sind sie nicht konstruierbar, man kann also keinen Konstruktor schreiben. Was C#-Structs zu eher nervigen "Feature" macht.

In C++ sind Klassen und Structs gleichwertig, ob kopiert oder referenziert wird, entscheidet nicht der Datentyp, sondern die Funktion, ob sie den Datentyp als Wert (class bla) oder als Referenz wünscht (class bla &). Der Unterschied zwischen struct und class in C++ ist lediglich, ob Member per Default private oder public sind. Trotzdem werden sie deutlich unterschieden. Eine Deklaration class bla kann nicht durch eine struct bla definiert werden.

In PHP ist das eigentlich alles egal, da ist ja eh alles dynamisch typisiert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: [PHP]Strukturen Emulation

Beitrag von darksider3 » Di Jan 15, 2013 6:04 pm

Das ganze ist auch nur als "Spaß" gedacht ;) ^^
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Antworten