2010-07-20 25 views
7

tôi đã xác định một biến trong một tập tin cấu hình riêng biệt:lỗi Parse khi concat'ing một biến xác định và chuỗi trong một lớp

define('URL', 'someurl.co.uk'); 

Tuy nhiên, khi tôi cố gắng sử dụng nó để concat với một chuỗi bên trong một lớp:

class AdminEmail extends Email { 

    private $from = "jsmith".URL; 

tôi nhận được lỗi sau:

Parse error: parse error, expecting `','' or `';'' 

Nhưng nếu tôi echo nó ra, nó sẽ hiển thị một cách hoàn hảo!

Hy vọng tôi chưa bỏ lỡ bất cứ điều gì hiển nhiên ở đây!

Trả lời

17

Bạn không thể sử dụng hằng số, hàm hoặc các biến khác khi xác định trước các biến lớp. Các định nghĩa lớp giống như các bản thiết kế, chúng phải hoàn toàn độc lập với bất kỳ thứ gì khác đang diễn ra trong kịch bản (ngoại trừ các phụ thuộc vào các lớp khác của khóa học.)

Bạn sẽ phải thiết lập điều này sau, ví dụ: trong constructor:

class AdminEmail extends Email { 

    private $from; 

    function __construct() 
    { 
    $this->from = "jsmith".URL; 
    } 

hoặc trong một chức năng riêng biệt:

function setFrom($from) 
    { 
    $this->from = $from; 
    } 
+1

Cảm ơn rất nhiều, tôi đã chỉ mới bắt đầu học OOP nên Tôi đặt cược đây là những thứ khá cơ bản. Chúc mừng một lần nữa! – davidandrew

+0

Đừng lo lắng, davey. Đang cố gắng để concat. một chuỗi để sử dụng như là một tài sản lớp bắt gặp tôi khi tôi bắt đầu quá! –

1

Bạn có thể sử dụng các hằng số, nhưng không phải là chức năng hay các thay đổi khi tiền xác định các biến lớp. Ngoài ra, bạn không thể sử dụng toán tử như toán tử ghép nối chuỗi . chấm.

Xem chi tiết PHP OO Manual. Hãy lưu ý rằng bạn có thể sử dụng cấu trúc array() khi xác định trước các biến lớp. array() không phải là chức năng mà là ngôn ngữ xây dựng.

Trong trường hợp này, bạn thực sự có hai đường dẫn để chọn làm giải pháp. Bạn có thể xác định giá trị trong các nhà xây dựng:

class AdminEmail extends Email { 

    private $from; 

    function __construct() 
    { 
    $this->from = "jsmith".URL; 
    } 

Các giải pháp khác là luôn lấy giá trị sử dụng một chức năng:

class AdminEmail extends Email { 

    private $from; 

    function getFrom() 
    { 
    if (null === $this->from) { 
     $this->from = "jsmith" . URL; 
    } 
    return $this->from; 
    } 
Các vấn đề liên quan