2013-04-10 55 views
0
class Constants 
    { 
      public static $url1  = "http=//url1"; 
      public static $url2  = Constants::$url1."/abc"; 
    } 

我想在類中訪問常量,但我無法做到這一點。 我該怎麼做?從常量類文件中訪問常量

+0

爲什麼不u使用'定義( 'URL1',的 「http // = URL1」)的內部;'和'define('URL2',URL1。「/ abc」);'? – ITroubs 2013-04-10 07:56:41

+0

它會使常量的使用更容易,實際上是默認的常量機制。 – ITroubs 2013-04-10 07:57:33

回答

0

這不是一個常數。這是一個靜態屬性。

你也不能使用self爲值:

public static $url2 = self::$url1."/abc"; // will throw error 

你必須在構造函數初始化:

class Constants 
{ 
    public static $url1 = "http=//url1"; 
    public static $url2; 

    public function __construct(){ 
     self::$url2 = self::$url1."/abc"; 
    } 
} 

$const = new Constants(); 
echo $const::$url2; 
//or if the class is initialized 
echo Constants::$url2; 

另一種選擇將是使一個靜態方法:

class Constants 
{ 
    public static $url1 = "http=//url1";   

    public static function getUrl2(){ 
     return self::$url1."/abc"; 
    } 
} 

echo Constants::getUrl2(); 
+0

class常量 { public static $ url1 =「http = // url1」; public static $ url2 = self :: $ url1。 「/ ABC」; } 是給symtax​​錯誤 – 2013-04-10 08:07:40

+0

@Sheldon庫珀是啊,我測試過it..see我更新的答案 – bitWorking 2013-04-10 08:12:21

+0

這不是GD的解決方案,u需要創建對象 – 2013-04-10 08:41:03

0

而不是使用Constants::你應該使用self::訪問類變量。例如:

public static $url2 = self::$url1 . "/abc"; 
+0

我認爲它應該是自我:: – ITroubs 2013-04-10 07:55:38

+0

'$ this-> url1'將不能用於靜態屬性。 – bitWorking 2013-04-10 08:01:38

0

只看到下面的代碼。

從類定義

<?php 
    class MyClass { 
     const CONST_VALUE = 'A constant value'; 
    } 

    $classname = 'MyClass'; 
    echo $classname::CONST_VALUE; // As of PHP 5.3.0 

    echo MyClass::CONST_VALUE; 
    ?> 

外面從類定義

<?php 
    class OtherClass extends MyClass 
    { 
     public static $my_static = 'static var'; 

     public static function doubleColon() { 
      echo parent::CONST_VALUE . "\n"; 
      echo self::$my_static . "\n"; 
     } 
    } 

    $classname = 'OtherClass'; 
    echo $classname::doubleColon(); // As of PHP 5.3.0 

    OtherClass::doubleColon(); 
    ?>