10/10/2018, 13:19

Hỏi về __construct trong php

Em có 1 class sv như sau:

class sv{
public $name;
public $address;
public $email;

function __construct($ten,$dc,$em){
$this->name= $ten;
$this->address= $dc;
$this->email= $em;
}

function getinfo(){
echo $this->name."<br />";
echo $this->address."<br />";
echo $this->email."<br />";
}
}
------------------------------
Em muốn hỏi là : có phải hàm __construct () trên thay cho các phương thức set, get không?
thay vì viết hàm

function __construct($ten,$dc,$em){
$this->name= $ten;
$this->address= $dc;
$this->email= $em;
}

Thì ta có thể viết như thế không?

function setName($value){
$this->name = $value;
}

function getName(){
return $this->name;
}
//---------------

function setAdress($value){
$this->address = $value;
}

function getAdress(){
return $this->address;
}

//-----------------
function setEmail($value){
$this->email = $value;
}

function getEmail(){
return $this->email;
}

-------------------------------------------------------------------

Em vẫn đang mông lung chỗ này!? Các bác giải thích giúp.
Cảm ơn nhiều.
9xnangdong viết 15:33 ngày 10/10/2018
Hàm __construct() trên của bạn chỉ có chức năng set thôi, không có get.
antipro.vn viết 15:36 ngày 10/10/2018
Bạn đọc thêm về ý nghĩa của hàm __construct ở đây
http://php.net/manual/en/language.oop5.decon.php

Nó không liên quan gì đến việc thay thế các hàm set/get cả.
trannamcn viết 15:27 ngày 10/10/2018
Bạn nên đọc thêm bài viết: Lập trình hướng đối tượng OOP ^_^
yeuyeulam viết 15:22 ngày 10/10/2018
Không giống các hàm bt mình phải gọi tới nó thì nó mới chạy, hàm dựng __construct() là tự động chạy khi bạn khởi tạo khởi tạo object = new class?

Vậy nên khi bạn khởi tạo đối tượng và gán cho class sv() với 3 tham số tương ứng thì thì thang __construct nó sẽ gán 3 tham số cho 3 thuộc tính tương tứng.
dhbd viết 15:30 ngày 10/10/2018
Ý của @yeuyeulam là hàm __construct sẽ tự chạy và được gán cho 3 biến. Khi object = new class thì object này sẽ có 3 tham số rồi.
Còn các hàm set, get là lúc nào cần thì mình mới gọi nó để chạy.
Ví dụ:
class sv{
public $name;
public $address;
public $email;
public $id;


function __construct($ten,$dc,$em){
$this->name= $ten;
$this->address= $dc;
$this->email= $em;
}
..
..

nếu $id kia không nằm trong __construct($ten, $dc, $em) thì phải sử dụng set và get để truyền tham số vào $id phải không ạ?

function setId($value){
$this->id = $value;
}

function getId(){
return $this->id;
}

Link: http://www.ddth.com/showthread.php/1...#ixzz2B2MqxluY


Được gửi bởi yeuyeulam
Không giống các hàm bt mình phải gọi tới nó thì nó mới chạy, hàm dựng __construct() là tự động chạy khi bạn khởi tạo khởi tạo object = new class?

Vậy nên khi bạn khởi tạo đối tượng và gán cho class sv() với 3 tham số tương ứng thì thì thang __construct nó sẽ gán 3 tham số cho 3 thuộc tính tương tứng.
longfan viết 15:20 ngày 10/10/2018
Mình giải thích 1 cách đơn giản nhất nhé. Bạn cứ hiểu __construct trong PHP5 là để không phải viết lại 1 method cùng tên với class giống như trong PHP4 mà thôi, nhiệm vụ của nó là SET var. Cùng với __construct() là hàm __destruct() làm nhiệm vụ UNSET var. Hai methods này cùng với một số methods khác như __call(), __get(), __set(), __isset(), __unset()... trong PHP5 gọi là Magic Methods.

Ví dụ class của bạn khi viết bằng PHP4 thì như sau:
class sv{
var $name;
var $address;
var $email;
var $id;


function sv($ten,$dc,$em){
$this->name= $ten;
$this->address= $dc;
$this->email= $em;
}
..
..

Khi gọi class thì như thế này:

$sv = new sv($ten,$dc,$em);


Còn PHP5 thì như sau:

class sv{
public $name;
public $address;
public $email;
public $id;


function __construct($ten,$dc,$em){
$this->name= $ten;
$this->address= $dc;
$this->email= $em;
}
..
..

Khi gọi class thì như thế này:

$sv = new sv($ten,$dc,$em);

Cách gọi y như PHP4 vậy thôi, khác là bạn không cần phải viết lại tên class nữa.

::END::

Khi bạn lập trình trong PHP5, chú ý các khóa public, protected, private.... nếu hiểu rõ và áp dụng tốt, đôi khi bạn sẽ không cần phải tạo các hàm setEmail() hoặc setId() nữa.
Bài liên quan
0