سؤال

كيف يمكنني الحصول على 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");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top