Seite 1 von 1

[PHP]Strukturen Emulation

Verfasst: Mo Jan 14, 2013 9:42 pm
von darksider3
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 :)

Re: [PHP]Strukturen Emulation

Verfasst: Mo Jan 14, 2013 11:28 pm
von Xin
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... ;-)

Re: [PHP]Strukturen Emulation

Verfasst: Di Jan 15, 2013 4:39 pm
von Glocke
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

Re: [PHP]Strukturen Emulation

Verfasst: Di Jan 15, 2013 4:46 pm
von Xin
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.

Re: [PHP]Strukturen Emulation

Verfasst: Di Jan 15, 2013 6:04 pm
von darksider3
Das ganze ist auch nur als "Spaß" gedacht ;) ^^