2012-01-06 10 views
9

Bất cứ ai có thể cho tôi biết lý do tại sao điều này không hoạt động? Nó chỉ là một ví dụ thô sơ về những gì tôi đang cố gắng làm ở một nơi khác.Liên tục __DIR__ hằng với một chuỗi như là một giá trị mảng mà là một thành viên lớp trong PHP

$stuff = array(
    'key' => __DIR__ . 'value' 
); 

Tuy nhiên, điều này tạo ra một lỗi:

PHP Parse error: syntax error, unexpected '.', expecting ')' in /var/www/.../testing.php on line 6 

Ngoài ra, công trình này:

$stuff = array(
    'key' => "{__DIR__} value" 
); 
+1

Cảm ơn đã phản ứng nhanh chóng ManseUK. Vì lợi ích của sự hiểu biết vấn đề của tôi nhiều hơn một chút - nó trở lại là gì? Tôi var_dump'ed nó: chuỗi (26) "/var/www/../trunk" – acairns

+1

đặt giá trị công cụ $ trên constructor của bạn – Gerep

Trả lời

7

Phần đầu tiên của mã không hoạt động bởi vì nó không phải là một biểu hiện thường xuyên, như bạn đang cố nối hai chuỗi. Các thành viên lớp ban đầu phải không đổi.

Từ documentation:

[property] initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

+0

Vì vậy, vì __ DIR __ là vị trí tệp hiện tại của thông tin thời gian chạy nên không có sẵn tại thời gian biên dịch. Cảm ơn Tim. – acairns

+1

@acairns: Không chính xác. PHP có giá trị '__DIR__' khi tập lệnh được biên dịch, vì bạn có thể thấy khi khởi tạo chuỗi như sau:' "{__DIR__} value" '. Làm thế nào bạn đang truy cập vào hằng số ma thuật là sự khác biệt duy nhất ở đây, nơi mà một trong những được xem như là một biểu hiện liên tục và khác không phải là. –

3

Bạn không thể sử dụng toán tử trong một khởi bất động sản. Cách giải quyết là sử dụng các nhà xây dựng:

public function __construct() 
{ 
    $this->stuff = array(
     'key' => __DIR__ . 'value' 
); 
} 

Từ PHP doc:

This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

http://www.php.net/manual/en/language.oop5.properties.php

0

Set $ ​​thứ giá trị trên constructor của bạn

function __construct() 
{ 
$this->$stuff = array(
     'key' => __DIR__ . 'value' 
    ); 
}