Küresel bir PHP SABİT Sınıf dosyanın içinde kullanılabilir mi?

4 Cevap php

Küresel bir PHP SABİT Sınıf dosyanın içinde kullanılabilir mi?

define('SITE_PATH', 'C:/webserver/htdocs/somefolder/');

Sonra benim sınıf dosyasında bunu deneyin

public $debug_file = SITE_PATH. 'debug/debug.sql';

Bu, olsa da çalışmak için görünmüyor

Parse error: parse error, expecting ','' or';'' in C:\webserver\htdocs\somefolder\includes\classes\Database.class.php on line 21

4 Cevap

Sen sınıf bildiriminde bir ifade olamaz.

Ben de yolu geçen öneririm:

public function __construct($path)
{
    $this->debug_path = $path;
}

Bu size hiç yolunu değiştirmek istiyorsanız, sen içeri geçmek sadece ne, sürekli değiştirmek zorunda değilsiniz daha fazla esneklik verir

Yoksa tüm farklı yolları var birden çok nesne oluşturmak olabilir. Eğer birden çok dizinleri yüklemek isteyebilirsiniz gibi, bir autoloader sınıf ise, bu yararlıdır.

$autoloader = new Autoload(dirname(SYS_PATH));
$autoloader->register_loader();

class Autoload
{
    public $include_path = "";

    public function __construct($include_path="")
    {
        // Set the Include Path
        // TODO: Sanitize Include Path (Remove Trailing Slash)
        if(!empty($include_path))
        {
            $this->include_path = $include_path;
        }
        else
        {
            $this->include_path = get_include_path();
        }

        // Check the directory exists.
        if(!file_exists($this->include_path))
        {
            throw new Exception("Bad Include Path Given");
        }
    }
    // .... more stuff ....
}

Ben ikinci ne diğerleri dedi. $ DebugFile isteğe bağlı bağımlılık görünüyor, çünkü ben sınıfın oluşturulması üzerinde bir aklı başında varsayılan başlatmak için önermek ve daha sonra gerektiğinde, örneğin, setter enjeksiyon yoluyla bunu değiştirerek izin istiyorum

define('SITE_PATH', 'C:/webserver/htdocs/somefolder/');

class Klass
{
    protected $_debugFile;
    public function __construct()
    {
        $this->_debugFile = SITE_PATH. 'debug/debug.sql' // default
    }
    public function setDebugFile($path)
    {
        $this->_debugFile = $path // custom
    }
}

SITE_PATH enjekte, bunun yerine hardcoding, daha iyi bir uygulama olacağını unutmayın.

Sen alan ilklendiricide ifade (.) Kullanamazsınız. See example one in PHP manual

Evet, ancak, derleme zamanında tanımlanmış özellik değerleri ifadeler olamaz.

Bkz http://php.net/manual/en/language.oop5.static.php