2012-02-19 33 views
38

tôi cần chức năng đó sẽ làm một cái gì đó như thế này:PHP constructor với tham số

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

Khi tôi viết một cái gì đó như thế này:

$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 

Tôi không biết làm thế nào để xây dựng parametrized trong PHP.

Bây giờ tôi sử dụng constructor như thế này:

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

Trả lời

97

Đọc tất cả những điều này http://www.php.net/manual/en/language.oop5.decon.php

Constructors có thể mất các thông số như bất kỳ chức năng khác hoặc phương pháp trong php

class MyClass { 

    public $param; 

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

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

dụ của bạn như thế nào bạn sử dụng các nhà xây dựng bây giờ thậm chí sẽ không biên dịch khi bạn không thể chỉ định lại $this.

Ngoài ra, bạn không cần dấu ngoặc nhọn mỗi lần bạn truy cập hoặc đặt thuộc tính. $object->property hoạt động tốt. Bạn chỉ cần sử dụng xoăn-ngoặc trong những trường hợp đặc biệt như thế nào nếu bạn cần đánh giá một phương pháp $object->{$foo->bar()} = 'test';

+0

Bạn nói đúng. Nó không hoạt động. Làm thế nào tôi có thể khởi tạo thuộc tính {'fvalue-string'} với giá trị mặc định? – Kamil

+0

Tôi đã cố gắng xây dựng với nhiều thông số ngày hôm qua và họ didnt làm việc, tôi đã làm điều gì đó sai, bởi vì tôi đã nhận lỗi. Tôi đã thấy nhiều ví dụ về mảng __construct (mảng) và "giải nén" bên trong hàm tạo, vì vậy tôi nghĩ rằng tôi không thể tạo hàm tạo với nhiều tham số trong PHP. Tôi đã sai. Cảm ơn bạn. – Kamil

15

Nếu bạn muốn vượt qua một mảng như một tham số và 'tự động' cư tài sản của bạn:

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

Thông báo rằng một hàm tạo được sử dụng để tạo ra một đối tượng khởi tạo &, do đó người ta có thể sử dụng $this để sử dụng/sửa đổi đối tượng bạn đang xây dựng.

Các vấn đề liên quan