2009-08-18 37 views
8

Tôi đã đoạn mã sau (Tôi là một nhà phát triển Dot Net và tôi nghĩ rằng nếu tôi có thể mang những kiến ​​thức OOP tôi để PHP)biến PHP trong lớp

class user { 
    var $_un; 
    function user($un) { 
    $_un = $un; 
    } 
    function adduser() { 
    } 
    function checkuser() { 
    } 
    function printuser() { 
     echo $_un; 
    } 
} 

$newuser = new user('Omar Abid'); 
$newuser->printuser(); 

Vì vậy, vấn đề là đơn giản "$ _un" là trống!! Tôi muốn nó được lấp đầy, khi lớp được tạo ra bằng cách sử dụng hàm tạo và sau đó được lưu lại.

Tôi đã từng làm điều đó trong C# .net, nhưng tại đây nó không hoạt động vì một số lý do. Cảm ơn!

Trả lời

7

Để truy cập thành viên của lớp học trong PHP, bạn cần sử dụng $this->.

Vì vậy, những gì bạn hiện đang làm là khai báo biến cục bộ được gọi là $_un, thay vì được gán cho biến thành viên $this->_un.

Hãy thử thay đổi mã của bạn để:

function user($un) { 
$this->_un = $un; 
} 

function printuser() { 
    echo $this->_un; 
} 

Và nó cũng làm việc.

+0

chức năng khác nên thay đổi cũng \t chức năng printuser() { \t \t vang của bạn $ this -> _ un; \t} Nhờ nó làm việc một cách chính xác tại –

+0

vâng, xin lỗi tôi đã bỏ lỡ 'printuser() ', cố định câu trả lời của tôi –

2

Sử dụng cấu trúc này.

class user {  
    var $_un;  
    function user($un) 
    { 
     $this->_un = $un;  
    } 
} 
3

trong php bạn phải sử dụng $this để truy cập các biến (hoặc phương pháp) của lớp hiện tại, điều này là cần thiết để phân biệt các thành viên lớp từ các biến địa phương

9

Thay vì sử dụng(), bạn nên sử dụng __construct (), đó là cách ưa thích để thêm một Constructor trong PHP5. Cũng xem xét để thêm tầm nhìn đến phương pháp và các thành viên (công/bảo vệ/tin)

public function __construct($un) { 
    $this->_un = $un; 
} 
+0

Đây là câu trả lời đúng ... – tekknolagi

+0

Nếu bạn có 20 biến ví dụ, bạn sẽ phải liệt kê chúng như đối số trong __construct (var1, var2, v.v ...)? – AlxVallejo