59 votes

Constructeur PHP avec un paramètre

J'ai besoin d'une fonction qui fasse quelque chose comme ceci :

$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;

Quand j'écris quelque chose comme ça :

$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

Je ne sais pas comment faire un constructeur paramétré en PHP.

Maintenant, j'utilise un constructeur comme ceci :

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;
    }
}

145voto

Mike B Points 18950

Lire l'intégralité de Constructeurs et destructeurs .

Les constructeurs peuvent prendre des paramètres comme toute autre fonction ou méthode en PHP :

class MyClass {

  public $param;

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

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

Votre exemple d'utilisation des constructeurs ne compilera même pas, car vous ne pouvez pas réaffecter les données de la base de données. $this .

De même, vous n'avez pas besoin des accolades à chaque fois que vous accédez à une propriété ou que vous la définissez. $object->property fonctionne très bien. Vous n'avez besoin d'utiliser des crochets que dans des circonstances particulières, par exemple si vous devez évaluer une méthode $object->{$foo->bar()} = 'test';

26voto

Michael Robinson Points 14791

Si vous voulez passer un tableau comme paramètre et remplir automatiquement vos propriétés :

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

Notez qu'un constructeur est utilisé pour créer et initialiser un objet, donc on peut utiliser $this pour utiliser/modifier l'objet que vous construisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X