Bitiştirmekten olmadan bir dizge içinde bir sabit eklemek için PHP bir yolu var mı?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
Hayır.
Dizeler, PHP dize verileri ve sabit tanımlayıcılarını ayırt etmek için hiçbir yolu yoktur. Bu yorumlu metin dahil olmak üzere PHP dize biçimlerden herhangi gider.
constant()
sabit tutmak için alternatif bir yoldur, ancak bir işlev çağrısı birleştirme olmadan bir dize koymak mümkün değildir, ne.
Dizeleri içinde sabitlerini kullanmak için aşağıdaki yöntemi kullanabilirsiniz:
define( 'ANIMAL', 'turtles' );
$constant = 'constant';
echo "I like {$constant('ANIMAL')}";
Bir değişkenin herhangi bir işlev adını koyun ve bir çift tırnaklı dizge içinde parametreleri ile çağırabilirsiniz. De birden fazla parametre ile çalışır.
$fn = 'substr';
echo "I like {$fn('turtles!', 0, -1)}";
Üretir
I like turtles
Ayrıca PHP 5.3 + koşuyoruz sağladığı anonim işlevlerini kullanabilirsiniz.
$escape = function ( $string ) {
return htmlspecialchars( (string) $string, ENT_QUOTES, 'utf-8' );
};
$userText = "<script>alert('xss')</script>";
echo( "You entered {$escape( $userText )}" );
Üretir properly escaped html as expected.
Şimdi size işlev adı herhangi çağrılabilir olabilir izlenimi altında iseniz bir dize içinde kullanıldığında geçirilen zaman true döndüren bir dizi is_callable
ölümcül bir hataya neden olur gibi, bu, böyle değil:
class Arr
{
public static function get( $array, $key, $default = null )
{
return is_array( $array ) && array_key_exists( $key, $array )
? $array[$key]
: $default;
}
}
$fn = array( 'Arr', 'get' );
var_dump( is_callable( $fn ) ); // outputs TRUE
// following line throws Fatal error "Function name must be a string"
echo( "asd {$fn( array( 1 ), 0 )}" );
Bu uygulama, tedbirsiz, ama bazen çok daha okunabilir kod sonuçlanır, bu yüzden size kalmış - olasılığı vardır.
Bu ad gezerken dağıtıp önlemek için fonksiyon için bir isim olarak anahtar kelime 'const' kullanabileceğiniz eğlenceli:
define("FOO","foo");
${'const'} = function($a){return $a;};
echo "{$const(FOO)}"; // Prints "foo"
echo const(FOO); // Parse error: syntax error, unexpected T_CONST
Ayrıca tüm kod üzerinde 'const' işlevi yaymak için $ GLOBALS kullanabilirsiniz:
$GLOBALS['const'] = function($a){return $a;};
Emin kullanarak gelecek için güvenlidir. Ve ne kötüdür - hala çirkin görünüyor bulunuyor.
Eğer gerçekten want to echo constant without concatenation burada çözüm ise:
define('MY_CONST', 300);
echo 'here: ', MY_CONST, ' is a number';
note: Bu örnekte yankı içinde bir dizi parametre (look at the commas), bu gerçek bitiştirme değildir kadar sürer
Bu birleştirmek ve daha sonra echo zorunda değildir çünkü Echo bir fonksiyonu gibi davranır, o, bu birleştirme daha verimli, daha parametreleri alır, sadece :)) yeni Dize birleştirilmiş nesnesi oluşturma gerek kalmadan her şeyi yankıları
EDIT
Eğer concatenating dizeleri, parameters veya yazılı olarak geçiĢlerinin dizeleri whole strings with ", , (virgül sürüm) düşünürsek de gelecek, her zaman en hızlı gider ve ifadeler bu şekilde beyan karşı değerlendirilmelidir yazılı çünkü yavaş dize kurma yöntemi, çift tırnak " kullanıyor . (' tek tırnak ile birleştirme) değişkenleri ve işlevleri ..
Diğerleri işaret gibi bunu yapamam. PHP constant()
bir dize doğrudan denilen cant bir işlevi vardır ama biz kolayca çalışabilirsiniz.
$constant = function($cons){
return constant($cons);
};
ve kullanımı hakkında temel bir örnek:
define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}";