Ben Optimal PHP Tanımlı sabitleri Kontrol İstiyor

2 Cevap php

PHP, hata raporlama düzeyine bağlı olarak, bir sabit tanımlamak ve sonra da bu yüzden gibi demiyoruz eğer:

<?= MESSAGE ?>

Bu değeri yerine sabit adını yazdırmak olabilir!

Yani, ben bu soruna almak için aşağıdaki fonksiyonu yazdım, ama daha hızlı kod bunu yapmak için bir yol biliyorum olmadığını bilmek istedi? Ben bu işlevi olmayan bir hız testi yaptım demek, ben tanımlamak ve 0,0073 saniyede 500 sabitleri dökümü olabilir. Ama aşağıda bu işlevi kullanın, ve bu her yerde .0159 den .0238 saniye geçer. Yani, mümkün olduğunca küçük aşağı mikrosaniye almak için çok iyi olurdu. Ve neden? Ben çiftleşmiş için kullanmak istiyorum çünkü. Ben sadece göstermek istediğiniz her değişken ile hata raporlama geçiş daha iyi bir yolu olmalı orada düşünüyorum.

function C($constant) {
    $nPrev1 = error_reporting(E_ALL);
    $sPrev2 = ini_set('display_errors', '0');
    $sTest = defined($constant) ? 'defined' : 'not defined';
    $oTest = (object) error_get_last();
    error_reporting($nPrev1);
    ini_set('display_errors', $sPrev2);
    if (strpos($oTest->message, 'undefined constant')>0) {
    	return '';
    } else {
    	return $constant;
    }
}

<?= C(MESSAGE) ?>

2 Cevap

Sürece sabitleri tırnak işaretleri kullanarak umursamıyorum gibi, bunu yapabilirsiniz:

function C($constant) {
    return defined($constant) ? constant($constant) : 'Tanımlanmamış';
}

echo C('MESSAGE') . '<br />';

define('MESSAGE', 'test');

echo C('MESSAGE') . '<br />';

Çıktı:

Tanımlanmamış

test

Aksi takdirde, tanımlanmamış bir sabit kullanarak atılan haber alıcı olmadan etrafında hiçbir yolu yoktur.

denemek

if (isset(constant($constant)) ...

Bu herhangi bir E_NOTICE iletileri algılanmaması gerekir, böylece error_reporting ayarlamak ve sıfırlamak zorunda değilsiniz.