PHP bir sınıf SABİT'i tanımlamak için dize birleştirme kullanabilir miyim?

5 Cevap php

Birbirinizi kullanarak dize birleştirme açısından küresel sabitleri oluşturabilirsiniz biliyorum:

define('FOO', 'foo');
define('BAR', FOO.'bar');  
echo BAR;

'foobar' yazacak.

Ancak, sınıf sabitleri kullanarak aynı şeyi yapmaya çalışıyorum bir hata alıyorum.

class foobar {
  const foo = 'foo';
  const foo2 = self::foo;
  const bar = self::foo.'bar';
}

foo2 sorunu olmadan tanımlanır, ancak const bar bildirerek dışarı hata olacaktır

Ayrıştırma hatası: sözdizimi hatası, ',' bekliyor, beklenmeyen veya ';'. '

Ben de sprintf gibi fonksiyonları kullanarak denedim () ama bir daha dize Concatenator daha sol paren sevmez. '.

Yani foo2 gibi önemsiz bir dizi durumda daha fazla şey birbirine bakımından sınıf sabitleri oluşturmak için herhangi bir yolu var mı?

5 Cevap

Tek yolu () bir ifadeyi tanımlamak ve sonra sınıfta bu sabit kullanmak için

define('foobar', 'foo' . 'bar');

class Foo
{
    const blah = foobar;
}

echo Foo::blah;

Başka bir seçenek bugs.php.net ve lütfen bu düzeltmek için onlara sormak gitmektir.

Her zaman bu gibi şeyler için geri güvenilir kılavuzuna düşer.

Ilgili constants:

The value must be a constant expression, not (for example) a variable, a property, a result of a mathematical operation, or a function call.

Yani ... "hayır" cevabım şu olurdu: D

class sabitleri için, sabit bir ifade başka bir şey atanamıyor. Alıntı PHP manual:

"Değeri değil (örneğin) bir değişken, bir özellik, bir matematik işleminin bir sonucu veya bir işlev çağrısı, bir sabit ifadesi olmalıdır."

hayır.

(Ben orada olduğunu sanmıyorum)

Bu sizin için ne arıyorsanız, doğrudan olmayabilir, ama ben bu konu geldi, işte ben (@ user187291 cevabı kapalı tabanlı) sahip oldu ben bir sorun için kullanılan bir çözümdür:

define('app_path', __DIR__ . '/../../');
const APPLICATION_PATH = app_path;
.
.
.
require_once(APPLICATION_PATH . "some_directory/some_file.php");
.
.
.

Büyük iş gibi görünüyor!