PHP sınıfı sabit tanımlama

3 Cevap php

Varolan bir sabiti bir birleştirme ve bir dize kullanarak bir sınıf sabit tanımlamak istiyorum. Sadece skalerler sabitleri predefining için izin verilir çünkü ben önceden tanımlayabilirsiniz değil, bu nedenle önceden tanımlanmış ise ben şu anda kontrol tanımlanan () fonksiyonu ile benim kurucu bir parçası olarak var. Bu çözüm çalışıyor ama benim sürekli şimdi gereksiz yere küreseldir.

Php zamanında bir sınıf sabit tanımlamak için bir yolu var mı?

Teşekkür ederim.

3 Cevap

Bkz PHP manual on Class constants

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ı sabit bir ifadesi olmalıdır.

Diğer bir deyişle, bu mümkün değildir. Sen runkit_constant_add ile yapabilirdi ama maymun yaması bu tür kesinlikle önerilmez.

Başka bir seçenek bazı değişkenlere değişiklikleri reddetmek için sihirli yöntemler __ get () ve __ set () kullanmaktır. Bu kadar çok bir sabit (diğer sınıfların perspektifinden) salt okunur bir değişken olarak değil. Böyle bir şey:

// Completely untested, just an idea
// inspired in part from the Zend_Config class in Zend Framework
class Foobar {

    private $myconstant;

    public function __construct($val) {
        $this->myconstant = $val;
    }

    public function __get($name) {
        // this will expose any private variables
        // you may want to only allow certain ones to be exposed
        return $this->$name;
    }

    public function __set($name) {
        throw new Excpetion("Can't set read-only property");
    }
}

Eğer Gordon's answer başına, ne yapmak istediğinizi tam olarak yapamaz. Ancak, böyle bir şey yapabilirsiniz. Sadece bir defa ayarlayabilirsiniz:

class MyClass
{
    private static $myFakeConst;

    public getMyFakeConst()
    {
        return self::$myFakeConst;
    }

    public setMyFakeConst($val)
    {
        if (!is_null(self::$myFakeConst))
            throw new Exception('Cannot change the value of myFakeConst.');

        self::$myFakeConst = $val;
    }
}