PHP конструктор с параметром - PullRequest
46 голосов
/ 19 февраля 2012

Мне нужна функция, которая будет делать что-то вроде этого:

$arr = array(); // this is array where im 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;

Когда я пишу что-то вроде этого:

$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 next parameter will go
// 3. Data for field specified in previous parameter
// 4. Array where should class go

Я не знаю, как сделать параметризованный конструктор в PHP.

Теперь я использую конструктор так:

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

Ответы [ 2 ]

123 голосов
/ 19 февраля 2012

Читать все это http://www.php.net/manual/en/language.oop5.decon.php

Конструкторы могут принимать параметры, как и любая другая функция или метод в php

class MyClass {

  public $param;

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

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

Ваш пример использования конструкторов теперь даже не будет компилироваться, поскольку вы не можете переназначить $this.

Кроме того, вам не нужны фигурные скобки каждый раз, когда вы открываете или задаете свойство. $object->property работает просто отлично. Вы должны использовать фигурные скобки только при особых обстоятельствах, например, если вам нужно оценить метод $object->{$foo->bar()} = 'test';

21 голосов
/ 19 февраля 2012

Если вы хотите передать массив в качестве параметра и «auto» заполнить ваши свойства:

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

Обратите внимание, что конструктор используется для создания и инициализации объекта, поэтому можно использовать $thisиспользовать / модифицировать объект, который вы строите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...