Basit ifadeler ile PHP sınıf mal bildirimlerini başlatılıyor sözdizimi hatası verir

3 Cevap php

PHP dokümanlar göre, bir aşağıdaki kısıtlama sınıflarda özelliklerini başlatmak için:

"Bu beyan, bir başlatma içerebilir, fakat bu başlatma sabit bir değer olmalıdır -. Yani, bu derleme zamanında değerlendirilmesi gerekir ve değerlendirilmesi amacıyla çalışma zamanı bilgileri bağlı olmamalıdır"

Ben bir diziyi başlatmak için çalışıyor ve bazı sorunlar yaşıyorum. Bu çalışıyor olsa da:

public $var = array(
    1 => 4,
    2 => 5,
);

Bu bir sözdizimi hatası oluşturur:

public $var = array(
    1 => 4,
    2 => (4+1),
);

Hatta bu kabul edilmez:

public $var = 4+1;

ki bu dizi () dil oluşumu bir sınırlama değil göstermektedir.

Şimdi, ben son baktığımda, "4 +1" kabul edilmelidir, sadece sabit bir değere eşit, ama aslında uzak optimize edilmelidir. Her durumda, kesinlikle derleme zamanında değerlendirilebilir yapabilen.

Peki burada neler oluyor? Gerçekten çizgisinde sınırlama "derleme zamanında değerlendirilecek mümkün" herhangi bir ifadesi karşısında, "hiç bir hesaplanan ifade olamaz" mi? Doktorun dilinde "değerlendirilen" kullanımı basit hesaplamalar izin önerir, ama ne yazık ki ....

Bu PHP bir hata varsa, herkes bir hata kimliği var mı? Ben birini bulmaya çalıştım ama herhangi bir şans yoktu.

3 Cevap

PHP derleme sırasında bu tür işlemleri yapmaz; Eğer tüm operatörler sabitler kendilerini bile, sabitler için hesaplanan değerleri atanamıyor. Sınıf üyelerinin varsayılan değerler aynı şekilde tedavi edilir. Ben sabitler iki yetkileri atamak için çalıştım ben bu davranışı karşılaştı:

class User {
    const IS_ADMIN = 1;
    const IS_MODERATOR1 = 1 << 1; // Won't work
    const IS_MODERATOR2 = 0x02;   // works
}

Bunun için php kollarınızı yukarı atmak önce, yürütme modeli düşünün. Php tipik Bu anlamda bir çok yapmaz içeri sonraki http istek gelinceye kadar ... idam, her şeyi inşa edilir, (ve, aslında, için tasarlanmış), ve daha sonra atılır için kullanılan bu ortamda ayrıştırma / derleme aşamasında hesaplamaları yaparak zaman harcamak. Motor burada genel durumda çok hızlı olması gerekir.

Ama haklısın, manuel bu alıntı "değerlendirmek" diyor. Belki bir dokümantasyon bilet açılmalıdır.


Edit march 2014

php şimdi Constant Scalar Expressions php 5.6 destek olacak gibi görünüyor: