PHP المتغيرات الثابتة في اقتباسات مزدوجة
سؤال
كيف يمكنني الحصول على PHP لتقييم متغير ثابت في اقتباسات مزدوجة؟
أريد أن أفعل شيئا مثل هذا:
log("self::$CLASS $METHOD entering");
لقد جربت كل أنواع {} المجموعات للحصول على القيمة المتغيرة للذات :: $ فئة، ولكن لا شيء قد عمل. لقد استقرت حاليا مع سلسلة سلسلة ولكنها ألم في الكتابة:
log(self::$CLASS . " $METHOD entering");
المحلول
آسف، لا يمكنك القيام بذلك. يعمل فقط على تعبيرات بسيطة. يرى هنا.
نصائح أخرى
لسوء الحظ، لا توجد طريقة في القيام بذلك حتى الآن. مثال في إحدى الإجابات هنا لن يعمل، ل {${self::$CLASS}}
لن ترجع محتوى self::$CLASS
, ، ولكن سيعود محتوى المتغير مع الاسم في self::$CLASS
.
هنا مثال، لا يعود myvar
, ، لكن aaa
:
$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";
لا أعرف الإجابة على سؤالك، ولكن يمكنك إظهار اسم الفصل والطريقة باستخدام __METHOD__
ماجيك ثابت.
استخدم وظيفة هوية مجهولة مخزنة في متغير. بهذه الطريقة سوف يكون لديك $
مباشرة بعد {
:
$I = function($v) { return $v; };
$interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";
(أنا أستخدم ثوابت الفصل في هذا المثال، لكن هذا سيعمل مع المتغيرات الثابتة أيضا).
فقط يعيش مع التسلسل. سوف تفاجأ كيف يمكن أن يكون الاستيفاء المتغير غير فعال في السلاسل.
وعلى الرغم من أن هذا قد يندرج تحت مظلة التحسين المسبق أو التحسين الصغير، إلا أنني لا أعتقد أنك تكسب فعلا أي أناقة في هذا المثال.
شخصيا، إذا كنت سأصنع تحسينا صغيرا أو آخر، وخياراتي "أسرع" و "أسهل في الكتابة" - سأختار "أسرع". لأنك فقط اكتبها عدة مرات، ولكن من المحتمل أن تنفذ الآلاف من المرات.
أعلم أن هذا سؤال قديم ولكني أجد أنه من الغريب أن لا أحد اقترح [sprintf][1]
وظيفة حتى الآن.
قل:
<?php
class Foo {
public static $a = 'apple';
}
سوف تستخدمها مع:
echo sprintf( '$a value is %s', Foo::$a );
لذلك على مثال الخاص بك:
log(
sprintf ( ' %s $METHOD entering', self::$CLASS )
);
نعم، من الممكن تحقيق ذلك:
log("{${self::$CLASS}} $METHOD entering");