2014-11-01 26 views
0

基本上,我想使用一個密鑰,並且能夠從另一個類調用一個類的函數。圍繞多個類使用密鑰

也許我會提供的例子將給出我的意思更好的解釋。我想到const,但我不能從那裏修改它。

我想過解析鍵作爲構造函數,我只是想知道是否有其他更好的方法來做它,因爲它將用於多個類。

Class1.php

<?PHP 

class Class1 { 
    public $key; 

    public function setKey($k) 
    { 
     $this->key = $k; 
    } 

    public static function getKey() 
    { 
     return $this->key; // this won't work because static 
    } 
} 


?> 

Class2.php

<?PHP 

class Class2 { 
    public function __construct() 
    { 
     echo Class1::GetKey(); // Need to retrieve the key here 
    } 
} 
?> 

的index.php

<?PHP 

require_once("Class1.php"); 
require_once("Class2.php"); 

$c1 = new Class1(); 
$c1->setKey("thekey"); 


$c2 = new Class2(); 
?> 

回答

0

您可以使用爲static c屬性,這樣你就可以在類之外使用它,並且可以在以後更改它。例如:

class Class1 
{ 
    static $key = 'ABC'; 
} 

class Class2 
{ 
    public function __construct() 
    { 
     echo 'Original key: ' . Class1::$key . '<br />'; 

     Class1::$key = '123'; 

     echo 'New key: ' . Class1::$key; 
    } 
} 

new Class2(); 

打印:

Original key: ABC 
New key: 123 

但爲了保持封裝概念,我建議你嘗試使用getset方法。

+0

謝謝你,我認爲這就是我要做的。 – Nathan 2014-11-02 13:50:07

1

實現此目的的一種方法是將存儲常用數據的類轉換爲singleton。基本上你只需要添加一個方法來始終如一地返回類的同一個實例:

class MyClass 
{ 
    /** 
    * @var MyClass 
    */ 
    protected static $instance; 

    protected $key; 

    public static getInstance() 
    { 
     if (!self::$instance) { 
      self::$instance = new MyClass(); 
     } 

     return self::$instance; 
    } 

    public function setKey($k) 
    { 
     $this->key = $k; 
    } 

    public static function getKey() 
    { 
     return $this->key; 
    } 
} 

然後使用它是這樣的:

// Both of these use the same instance of MyClass 
MyClass::getInstance()->setKey('hello'); 
MyClass::getInstance()->getKey(); 

這使您可以使用實例屬性和方法寫的類,不使一切都靜止。

延伸閱讀:

+0

謝謝你的迴應。 – Nathan 2014-11-02 13:50:31

0

讓您的Class2這樣

<?PHP 

class Class2 { 
public function __construct(Class1 $a1) 
{ 
    echo $a1->GetKey(); // Need to retrieve the key here 
} 
} 
?> 

,使的index.php這樣的方式

<?PHP 

require_once("Class1.php"); 
require_once("Class2.php"); 

$c1 = new Class1(); 
$c1->setKey("thekey"); 


$c2 = new Class2($c1); 

?>

+0

感謝您的回覆。 – Nathan 2014-11-02 13:51:11