2011-10-11 107 views
1

是否有可能使用另一個靜態變量在PHP中初始化另一個靜態變量?在PHP中使用靜態變量

public static $conf_siteroot = "http://mysite.com/"; 
public static $conf_docroot = "C:/Users/Mp/Documents/Projects/nana/webroot/"; 

public static $conf_doclib = $conf_docroot."library/"; 
public static $conf_sitelib = $conf_siteroot."library/"; 

這段代碼根本不起作用,但我需要重用靜態變量,所以我不會寫太多。由於

+1

我不這麼認爲,但我想你可以嘗試 - 只要使用正確的語法:'公共靜態$ conf_doclib =自:: $ conf_docroot「庫/」;' –

+3

有關使用常量,而不是什麼靜態變量? –

+0

是的,這應該工作 - 使用self ::正如Pekka所說。這隻適用於類常量,但公共靜態變量應該可以。 – halfer

回答

0

簡短的回答是 - 沒有

但你可以在_clone_construct
重新初始化靜態無功而這不正是你需要

你可以寫這樣的東西:

<? 
// file Foo.php 

class Foo { 
    public static $prefix = 'foo'; 
    public static $bar; 
} 

// Bootstrapping 
foo::$bar = foo::$prefix . '/bar'; 
+0

好的...任何其他代碼建議?我真的想讓這個配置變量在我的函數中可用,而不使用全局的 –

+0

@Mahan,請參閱更新 – azat

0

您不能在運行時動態地將值分配給靜態屬性。

但是你可以寫靜態getter函數返回你要找的值:

class Foo 
{ 
    public static $conf_siteroot = "http://mysite.com/"; 
    public static $conf_docroot = "C:/Users/Mp/Documents/Projects/nana/webroot/"; 

    /** 
    * exemplary getter function for the ConfDocLib value 
    */ 
    public static function getConfDocLib() 
    { 
     return self::$conf_docroot."library/"; 
    } 
    ... 
} 

Foo::getConfDocLib(); # your dynamic value, statically accessible globally. 

或者將它們分配給超全局數組$_GLOBALS這可能是幾乎相同的公共靜態屬性可能。只是另一個想法。

+0

沒有辦法聲明靜態getter函數http://stackoverflow.com/questions/1279382/magic-get-getter -for-static-properties-in-php – azat

+0

@azat:你誤解了我的答案,我不是在談論超載。明確我已經忽略了,讀第一句*「你不能在運行時動態地賦值給靜態屬性。」*(其中包括PHP的重載魔術方法)。如果你不知道getter函數是什麼,請閱讀[爲什麼getter和setter方法是邪惡的](http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html) 。 – hakre

+0

@azat:增加了一個例子,以防萬一它有幫助。 – hakre

0

你不能這樣做。

像其他任何PHP靜態變量一樣,靜態屬性可能只有 使用文字或常量初始化;表達式是不允許的。 因此,儘管您可以將靜態屬性初始化爲整數或數組 (例如),但您可能不會將其初始化爲其他變量,返回值爲 或對象。 。