PHP-Konstruktor mit einem Parameter

Lesezeit: 2 Minuten

Benutzer-Avatar
Kamil

Ich brauche eine Funktion, die so etwas tut:

$arr = array(); // This is the array where I'm storing data

$f = new MyRecord(); // I have __constructor in class Field() that sets some default values
$f->{'fid'} = 1;
$f->{'fvalue-string'} = $_POST['data'];
$arr[] = $f;

$f = new Field();
$f->{'fid'} = 2;
$f->{'fvalue-int'} = $_POST['data2'];
$arr[] = $f;

Wenn ich sowas schreibe:

$f = new Field(1, 'fvalue-string', $_POST['data-string'], $arr);
$f = new Field(2, 'fvalue-int', $_POST['data-integer'], $arr);

// Description of parameters that I want to use:
// 1 - always integer, unique (fid property of MyRecord class)
// 'fvalue-int' - name of field/property in MyRecord class where the next parameter will go
// 3. Data for field specified in the previous parameter
// 4. Array where the class should go

Ich weiß nicht, wie man einen parametrisierten Konstruktor in PHP erstellt.

Jetzt verwende ich einen Konstruktor wie diesen:

class MyRecord
{
    function __construct() {
        $default = new stdClass();
        $default->{'fvalue-string'} = '';
        $default->{'fvalue-int'} = 0;
        $default->{'fvalue-float'} = 0;
        $default->{'fvalue-image'} = ' ';
        $default->{'fvalue-datetime'} = 0;
        $default->{'fvalue-boolean'} = false;

        $this = $default;
    }
}

Benutzer-Avatar
Mike B

Lesen Sie alle Konstruktoren und Destruktoren.

Konstruktoren können Parameter wie jede andere Funktion oder Methode in PHP annehmen:

class MyClass {

  public $param;

  public function __construct($param) {
    $this->param = $param;
  }
}

$myClass = new MyClass('foobar');
echo $myClass->param; // foobar

Ihr Beispiel für die Verwendung von Konstruktoren wird jetzt nicht einmal kompiliert, da Sie keine Neuzuweisungen vornehmen können $this.

Außerdem benötigen Sie die geschweiften Klammern nicht jedes Mal, wenn Sie auf eine Eigenschaft zugreifen oder diese festlegen. $object->property funktioniert prima. Sie müssen geschweifte Klammern nur unter besonderen Umständen verwenden, z. B. wenn Sie eine Methode auswerten müssen $object->{$foo->bar()} = 'test';

  • Sie haben Recht. Es funktioniert nicht. Wie kann ich die Eigenschaft {‘fvalue-string’} mit dem Standardwert initialisieren?

    – Kamil

    19. Februar 2012 um 5:41 Uhr

  • Ich habe gestern den Konstruktor mit mehreren Parametern ausprobiert und sie haben nicht funktioniert, ich habe etwas falsch gemacht, weil ich Fehler bekommen habe. Ich habe viele Beispiele für __construct(array) und das “Entpacken” von Arrays im Konstruktor gesehen, also dachte ich, dass ich den Konstruktor nicht mit vielen Parametern in PHP erstellen kann. Ich lag falsch. Vielen Dank.

    – Kamil

    19. Februar 2012 um 5:53 Uhr


  • Warum machst du $param öffentlich? Kannst du nicht sagen return $param im Konstruktor und rufen Sie die Klasse like auf echo new MyClass('foobar') ?

    – Max Muster

    2. Juni 2021 um 22:51 Uhr

Wenn Sie ein Array als Parameter übergeben und Ihre Eigenschaften automatisch füllen möchten:

class MyRecord {
    function __construct($parameters = array()) {
        foreach($parameters as $key => $value) {
            $this->$key = $value;
        }
    }
}

Beachten Sie, dass ein Konstruktor verwendet wird, um ein Objekt zu erstellen und zu initialisieren, daher kann man verwenden $this um das Objekt, das Sie konstruieren, zu verwenden / zu ändern.

1333640cookie-checkPHP-Konstruktor mit einem Parameter

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy