2012-01-06 28 views
9

Neden bunun neden işe yaramadığını söyleyebilir misiniz? Sadece başka bir yere yapmaya çalıştığım şeyin kaba bir örneği.PHP'de bir sınıf üyesi olan dizi değeri olarak bir dizge ile __DIR__ sabitinin birleştirilmesi

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

Ayrıca, bu işler:

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

Ancak bu bir hata üretir

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

Teşekkür: PHP doc itibaren

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

: geçici çözüm yapıcısı ManseUK. Sorunumu anlamak için biraz daha fazla - ne dönüyor? I var_dump'ed: string (26) "/var/www/../trunk" – acairns

+1

$ $ değerindeki kurucunuzun değeri – Gerep

cevap

7

bir sabit ifadesi olmadığı için kodunun ilk parçası size kadar, çalışmıyor iki dizeyi birleştirmeye çalışıyorlar. İlk sınıf üyeleri sabit olmalıdır. documentation itibaren

:

[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

Bu yüzden __ DIR __ geçerli dosyanın konumu olduğu için çalışma zamanı bilgileri kullanılamaz. derleme zamanında. Teşekkürler Tim. – acairns

+1

@acairns: Tam olarak değil. PHP, "__DIR__" değerine sahiptir, çünkü betik derlenirken görüldüğü gibi: "" {__DIR__} value "'. Büyü sabitine nasıl erişiyorsunuz, burada tek fark, birinin sabit bir ifade olarak görüldüğü ve diğerinin olmadığı. –

3

Bir özellik başlatma operatöre kullanamaz. hızlı tepki için yapıcı

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

Seti $ şeyler değeri

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